PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Performante Programmiersprache


Gast
2011-03-31, 19:59:32
Hallo,
ich würde gerne eine neue Programmiersprache lernen. Ich will Algorithmen & Datenstrukturen für diverse Informatik-Probleme implementieren, zB Heuristiken für Graph-Probleme. Vielleicht auch grössere Projekte, je nachdem wie gut die Sprache dafür geeignet ist.

Ich habe bisher an C/C++, dylan und Haskell gedacht, fällt euch noch was ein bzw. was spricht eurer Meinung nach für eine dieser Sprachen? zB wäre mir gutes Multi-Threading wichtig. Wie siehts mit Java aus, auch wegen der aktuellen Lage mit Oracle?

huha
2011-03-31, 20:22:01
Was kannst du denn bereits?
Funktionale Programmiersprachen sind für manche Algorithmen toll, für andere absolut katastrophal. Außerdem muß man da wissen, auf was man sich einläßt, das ist nicht mal eben so gelernt. Im funktionalen Bereich empfehlen sich insbesondere Haskell und Common LISP.

C/C++ sind natürlich ganz klassische Programmiersprachen, die man durchaus zumindest grob können sollte.
Um konkret zu entscheiden, was nun geschickt für dich wäre, mußt du aber mehr zu deinem Hintergrund erzählen und auch etwas detaillierer beschreiben, was du eigentlich machen willst.

-huha

samm
2011-03-31, 20:39:30
"Gutes Multi-Threading" gibt es eigentlich nirgends mal eben eingebaut. Da musst du als Programmier schon selbst für sorgen. Was huha sagt, ist auch sehr wichtig. Es sollte dir klar sein, dass imperative, funktionale oder deklarative Programmiersprachen bei allen Überschneidungen, die sie aufweisen mögen, ein anderes Denken erfordern, um effizient ans Ziel zu kommen.

Coda
2011-03-31, 20:46:15
"Gutes Multi-Threading" gibt es eigentlich nirgends mal eben eingebaut.
Das stimmt so pauschal nicht. Beispielsweise Erlang, Scala und Go bieten da ziemlich nützliche, in die Sprache eingebaute Hilfsmittel. Und damit meine ich nicht Thread-Pools in der Standard-Library :)

huha
2011-03-31, 21:22:22
Multithreading geht in funktionalen Programmiersprachen im Prinzip auch automatisch schon gut genug, da man die Dinge üblicherweise so konstruiert, daß sie nicht von der Ausführungsreihenfolge abhängig sind (bzw. anders gesagt: In vielen funktionalen Programmiersprachen muß man explizit bestimmen, daß etwas in einer bestimmten Reihenfolge auszuführen ist, wenn man das unbedingt braucht). Leider ist das eben nicht ganz intuitiv und daher ist es wichtig, den Umfang und die Intensität der Fragestellung zu kennen. Bei einer funktionalen Programmiersprache fängt man eben von Null an, auch als sehr guter imperativer Programmierer. Daneben empfehlen sich Kenntnisse der Mathematik und theoretischen Informatik, weil so einige Dinge viel leichter verständlich sind. Imperative Programmiersprachen sind eben von der Konzeption viel näher an real existierenden Maschinen ausgerichtet, während funktionale Sprachen eher eine mathematische Basis haben. Die sind nicht unbedingt extrem schwer zu erlernen, es erfordert aber einige Anstrengung, auch für sehr erfahrene Programmierer.

-huha

Coda
2011-03-31, 21:30:44
Das ist schon richtig, aber das meinte ich nicht.

Die von mir genannten Sprachen implementieren das Actor Model (http://en.wikipedia.org/wiki/Actor_model), was vor allem viel einfacher das Sicherstellen der Korrektheit von parallel laufendem Code viel einfacher macht. Go ist auch keine funktionale Programmiersprache, und Scala nur teilweise.

Fine-Grain-Parallelität bringt meistens sowieso nicht den gewünschten Performance-Vorteil, deshalb finde ich diesen Ansatz sehr elegant.

Gast
2011-03-31, 22:29:57
@huha: Ich kann ein paar Skriptsprachen (Tcl, PHP, Python, ...), wobei mir Python bisher am besten gefällt: Man beschäftigt sich hauptsächlich mit dem Problem, und nicht mit der Sprache. Man ist zu Sauberkeit mehr oder weniger gezwungen, Code ist gut lesbar. Man kommt schnell ans Ziel. Aber es ist eben verdammt langsam. Mich in ein neues "Programmiersprachen-Konzept" einzuarbeiten würde mich nicht stören.

Anwendungsgebiet: Wissenschaft - meistens wird das was mit Graph-Algorithmen und Heuristiken zu tun haben. Matchings, (graph-)Suchalgorithmen, graph coloring, Schwarm- oder evolutionäre Algorithmen, dafür maßgeschneiderte Datenstrukturen bauen, um neue heuristische Methoden auszuprobieren. Als erstes, zum Lernen der Sprache, hätte ich daran gedacht eine maximum-clique Heuristik zu implementieren.

Meine Mathe-Kenntnisse sind eher rudimentär, von theoretischer Informatik weiß ich aber sicher genug.

Limit
2011-03-31, 23:15:37
Wenn es nur darum geht Algorithmen zu verstehen und mal selbst zu implementieren ist Python sicherlich eine gute Wahl, da sehr übersichtlich und mit geringem Overhead. Multi-Threading ist damit aber kaum möglich.

Am meisten optimieren kannst du wohl mit C/C++ bzw. Fortran, was aber einerseits viel Wissen voraussetzt und andererseits auch sehr fehleranfällig ist. Wenn du dir es zutraust, könntest du dann auch gleich OpenCL ins Auge fassen.

Mit Java/C# kannst du dich mit den klassischen Methoden für Parallelverarbeitung (Threads, Mutex, Semaphore, ...) vertraut machen und anschließend die "höheren" Bibliotheksfunktionen benutzen. Als Einstieg, denke ich ganz ok, auch wenn es performance-seitig sicherlich nicht die beste Wahl ist.

Die von Coda erwähnten Programmiersprachen bieten sich eher wegen der "höheren" Funktionen an. In dem Bereich entwickelt sich zur Zeit recht viel, den heiligen Gral hat man da aber noch nicht gefunden. Das würde ich beobachten, aber ein großes Projekt würde ich damit nicht unbedingt anfangen.

Coda
2011-03-31, 23:19:24
Wenn du dir es zutraust, könntest du dann auch gleich OpenCL ins Auge fassen.
Das ist keine allgemein verwendbare Programmiersprache und eignet sich nur für datenparallele Algorithmen und Datenstrukturen.

Die von Coda erwähnten Programmiersprachen bieten sich eher wegen der "höheren" Funktionen an. In dem Bereich entwickelt sich zur Zeit recht viel, den heiligen Gral hat man da aber noch nicht gefunden. Das würde ich beobachten, aber ein großes Projekt würde ich damit nicht unbedingt anfangen.
Halte es bitte mit Nuhr :facepalm:

Die komplette Telefon-Infrastruktur von Ericsson ist beispielsweise in Erlang implementiert. Und funktionale Programmierung ist nun wirklich nichts neues und sehr ausgereift. LISP ist so ziemlich eine der ältesten Programmiersprachen.

Scala und Go sind auch keine radikale Abkehr von der gängigen Norm. Ich würde für die JVM nur noch unter Schmerzen mit Java statt Scala entwickeln können. Da fühlt man sich als wäre man dabei an die Wand gefesselt.

Exxtreme
2011-04-01, 09:18:32
Hallo,
ich würde gerne eine neue Programmiersprache lernen. Ich will Algorithmen & Datenstrukturen für diverse Informatik-Probleme implementieren, zB Heuristiken für Graph-Probleme. Vielleicht auch grössere Projekte, je nachdem wie gut die Sprache dafür geeignet ist.

Ich habe bisher an C/C++, dylan und Haskell gedacht, fällt euch noch was ein bzw. was spricht eurer Meinung nach für eine dieser Sprachen? zB wäre mir gutes Multi-Threading wichtig. Wie siehts mit Java aus, auch wegen der aktuellen Lage mit Oracle?
Solange mal nicht irgendwelche Skriptsprachen ala PHP oder Python nimmt oder ganz frische/unübliche Sprachen ala D oder Go wo die Compiler noch nicht so ausgereift sind macht man eigentlich kaum was falsch mit den gängigen Sprachen.

pest
2011-04-01, 11:35:46
Python sicherlich eine gute Wahl, da sehr übersichtlich und mit geringem Overhead. Multi-Threading ist damit aber kaum möglich.

falsch

Tiamat
2011-04-01, 12:50:53
Mein Prof in Wissensverarbeitung würd dir garantiert Prolog empfehlen ;D

Aber ich würd da einfach zu C/C++ greifen. Davon ausgehend gibt´s mittlerweile einfach viele Optionen, Cuda, Boost, OpenMP,..

Du weißt ja dass die ganze klassische Wissensverarbeitung ihre Grenzen hat. Natürlich kannst du die Suchbäume durch Heuristiken verkleinern, aber bei NP komplexen Problemen bringt dir das in den wenigsten Fällen was. Bei solchen Problemen brauchst du dann evolutionäre/genetische Algorithmen oder neuronale Netze und da biste mit C++ auch besser beraten als mit Python. Das ganze ist nach wie vor ne Performancesache. Python geht bei ernsthaften Berechnungen schnell die Puste aus.

FlashBFE
2011-04-01, 12:55:46
Mit Java/C# kannst du dich mit den klassischen Methoden für Parallelverarbeitung (Threads, Mutex, Semaphore, ...) vertraut machen und anschließend die "höheren" Bibliotheksfunktionen benutzen.

Finde ich (bei .NET Sprachen) nicht gut. Wenn man da neu einsteigt, sollte man meiner Meinung direkt mit der Task Parallel Library anfangen. Vor allem, wenn man ergebnisorientiert arbeiten will und nicht das ganze "untendrunter" kennen lernen will.

Ich habe jetzt auch schon ein paar Projekte mit der TPL (und ein wenig PLINQ (Parallel Language INtegrated Query)) gemacht und es erfordert ein gehöriges Stück Umgewöhnung. Gerade der exzessive Gebrauch von Delegaten und Lambda-Funktionen ist etwas, was da zur Normalität gehört und was ich bei normaler Threadprogrammierung vorher fast nie gebraucht habe. Im Gegenzug fallen Rechenzeit raubende Sperren, aufwendige selbstfabrizierte Datenparallelität und der ganze Mist weg, der einen Tage lang nach dem Fehler suchen lässt. Man bekommt eine Schicht tiefer eine automatische hochoptimierte Thread- und Datenverwaltung dazu, die man einfach so selbst nicht bauen könnte.

Ob .NET und JVM Programme nun für Algorithmen taugen, die durch Hardwarenähe vielleicht noch etwas an Geschwindigkeit zulegen könnten, will ich nicht beurteilen. Aber wenn ich sehe, woher der TE kommt, wäre eine hardwarenahe (und da zähle ich auch C++ zu) Sprache für ihn erstmal das falsche. Einen ungeheuren Geschwindigkeitszuwachs bekommt er so oder so, wenn er von Interpretersprachen wegkommt.

pest
2011-04-01, 13:05:03
etwas OT aber...

ich frage mich immer was vor allem die Informatiker mit Genetischen Algorithmen und Neuronalen Netzen haben. Klingt zwar toll aber there's no magic.

Tiamat
2011-04-01, 22:53:34
@Pest:
Der Hauptfokus dieser Algorithmen liegt halt im maschinellen Lernen.
Das sind halt ganz andere Ansätze. Viele Probleme bei Graphen können ebenso mit nem genetischen Algorithmus gelöst werden und können noch da noch gute Ergebnisse liefern, wo die Wissensverarbeitung längst aufgegeben hätte. Und die genetischen Algos sind so generisch, dass man in der Regel nur die Fitness-Funktion für ein anderes x-beliebiges Problem anpassen muss und sind vor allem auch einfach zu implementieren, wenn man´s mal gemacht hat. Die Stundenpläne an meiner HS werden mit genetischen Algorithmen gemacht =)

Und neuronale Netze sind halt die fortgeschrittensten Vertreter, was Lernen angeht. Generell die ganze Mustererkennung(Bilder, Schrift, e.t.c), Roboter. Da gibt´s meines Wissens nix besseres. Hat mit Graphen aber eher wenig zu tun.

Ich hab letztes Semester eine Vorlesung zu dem Bereich gehört und ich fand das total beindruckend. Ein geiles Beispiel war die Erkennung von Verpackung von Markprodukten eines Herstellers. Da gabs halt verschiedene Sorten und ein einfaches neuronales Netz (Perzeptron) wurde antrainiert und hat später die Produkte mit ner Smartphone Kamera erkannt. Und im Prinzip wär das egal gewesen, ob das jetzt die Verpackung des einen Herstellers war oder ne ganz andere, weil man das Netz einfach mit den Sorten des neuen Hersteller antrainiert hätte.

Coda
2011-04-02, 04:35:01
falsch
Wie denn? Mit CPython und dem GIL geht es zwar, aber es läuft trotzdem nur Pseudo-Parallel dann.

pest
2011-04-02, 09:24:39
ist zwar schon ne Weile her, dass ich Python gemacht habe aber, genutzt haben wir dann PP

Parallel Python (http://www.parallelpython.com/)


Das sind halt ganz andere Ansätze.


Nicht unbedingt. Nen neuronales Netz ist für mich einfach nur nen stochastisches Gradientenverfahren. "machinelles Lernen" klingt einfach spektakulärer, ich weiß.

Tiamat
2011-04-02, 13:41:23
Deswegen nennt sich das ja maschinelles Lernen, weil das Netz in der Lernphase somit seine Parameter justiert, quasi dazulernt.

Vielleicht enttäuscht dich das, weil es einfach mathematische Funktionen sind, aber seien wir mal ehrlich, wo gibt´s die nicht in der Informatik..

Aquaschaf
2011-04-02, 14:11:00
@Pest:
Der Hauptfokus dieser Algorithmen liegt halt im maschinellen Lernen.
Das sind halt ganz andere Ansätze.

Als ganz anderen Ansatz würde ich das nicht bezeichnen. Es ist eine Optimierungsstrategie unter vielen, nicht die fortschrittlichste, neueste und oft auch nicht die beste.

Zum Topic: per se performant ist keine Programmiersprache, performant (oder eben nicht) sind die Programme die man darin schreibt. Was eine gute Wahl ist hängt von vielen anderen Kriterien ab. Für welches System willst du programmieren? Willst du bei 0 anfangen, oder soweit es geht Bibliotheken verwenden? Welche Sprachen kannst du schon, was willst du lernen? Müssen oder sollen deine Programme mit etwas anderem zusammen spielen, oder stehen sie nur für sich?

Threadstarterh
2011-04-02, 19:03:38
Für welches System willst du programmieren? Willst du bei 0 anfangen, oder soweit es geht Bibliotheken verwenden? Welche Sprachen kannst du schon, was willst du lernen? Müssen oder sollen deine Programme mit etwas anderem zusammen spielen, oder stehen sie nur für sich?
Plattformunabhängig wäre fein. Naja, wenns nur auf Linux läuft macht das eigentlich auch nix.
Bibliotheken verwende ich schon, ja. Also muss das Programm mit ein paar C/C++ libraries (zB boost) zusammenspielen. DB-Anbindung muss möglich sein. Aber diese Sachen kann jede dieser Sprachen denke ich.

Ich hab mir jetzt genauer diese Benchmarks, Memory/runtime/code-Vergleiche angesehen:
http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=all

Schwierige Sache. Java/Scala braucht viel Speicher - sind das nur ein paar standard-libraries die da halt immer eingebunden werden (wie war das mit dem "schmalen Kern"?), oder skaliert der Speicherbedarf da auch bei grösseren Anwendungen śo stark nach oben? Und weiß jemand über die Lage mit Oracle Bescheid?

Coda
2011-04-02, 20:15:51
Java und Scala verwenden Garbage-Collection und laden immer die ganze JVM mit. Das führt zu einem relativ hohen Speicherverbrauch. Allerdings ist die Freigabe von Speicherblöcken defensiv, das heißt es ist mehr Speicher effektiv "frei" als das was angezeigt wird. Das hilft natürlich anderen Programmen nichts.

Falls Speicherverbrauch ein großes Problem ist würde ich eine Sprache bevorzugen, die keinen GC verwenden, also beispielsweise C oder C++.

Senior Sanchez
2011-04-03, 18:58:04
Und neuronale Netze sind halt die fortgeschrittensten Vertreter, was Lernen angeht. Generell die ganze Mustererkennung(Bilder, Schrift, e.t.c), Roboter. Da gibt´s meines Wissens nix besseres. Hat mit Graphen aber eher wenig zu tun.

Hängt immer vom Anwendungszweck ab. ;)
Für bestimmte Bereiche und Anforderungen gibt es besseres als neuronale Netze. Zum Beispiel sind neuronale Netze im Training nicht gerade die schnellsten Verfahren. ;) Wo es drauf ankommt, z.B. im temporal data mining kann das dann schon entscheidend sein. Das größte Problem der neuronalen Netze ist aber ihre relativ schlechte, natürliche Interpretation. Man kann sich so ein Netz anschauen, aber warum das funktioniert, blickt man nicht. Da gibt es eben verständlichere Verfahren.

Man muss aber natürlich auch sagen, dass der Begriff neuronale Netze im Grunde nur eine Oberklasse ist. Es gibt so viele verschiedene Verfahren in dieser Klasse, die verschiedene Dinge leisten, dass man keine generelle Aussage über diese Netze treffen kann. Andererseits haben verschiedene Verfahren, z.B. SVMs, ihren Ursprung in neuronalen Netzen, was heute aber recht verwischt ist.

Coda
2011-04-03, 22:07:31
Zu neural nets gab es auch mal einen sehr guten Google Tech Talk (http://www.youtube.com/GoogleTechTalks#p/search/7/AyzOUbkUf3M)

Senior Sanchez
2011-04-03, 22:26:03
Zu neural nets gab es auch mal einen sehr guten Google Tech Talk (http://www.youtube.com/GoogleTechTalks#p/search/7/AyzOUbkUf3M)

Cool!
Danke für den Link, das schaue ich mir an.

Die Beschreibung erinnert mich teilweise an Hierarchical Temporal Memory:
http://numenta.com/

Simon
2011-04-03, 22:41:01
Ich hab mir jetzt genauer diese Benchmarks, Memory/runtime/code-Vergleiche angesehen:
http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=all
Damit waer ich vorsichtig, da werden u.a. Compiler, Optimierungen und Implementierungen miteinander vergliche.

Noch eine IBM-Studie dazu: Are Scripting Languages Any Good?
A Validation of Perl, Python, Rexx, and Tcl
against C, C++, and Java (http://www.redcor.ch/web/intranet_zope_plone/entscheidungshilfen/comapring_scripting_languages.pdf)



For the main phase of the phonecode program (search through the internal data structure), the advantage in run time of C or C++ versus Java is only about factor 2 and the script programs even tend to be faster than the Java programs.
For all program aspects investigated, the performance variability due to different programmers (as described by the bad/good ratios) tends to be larger than the variability due to different languages



Und zum Ende:
[X] Go

Exxtreme
2011-04-03, 22:49:10
Damit waer ich vorsichtig, da werden u.a. Compiler, Optimierungen und Implementierungen miteinander vergliche.

Noch eine IBM-Studie dazu: Are Scripting Languages Any Good?
A Validation of Perl, Python, Rexx, and Tcl
against C, C++, and Java (http://www.redcor.ch/web/intranet_zope_plone/entscheidungshilfen/comapring_scripting_languages.pdf)

Hmmm, diese Studie ist von 2002 wenn ich das so überblicken kann. Da hat sich seit dem dann doch vieles getan.

Simon
2011-04-03, 22:51:20
Hmmm, diese Studie ist von 2002 wenn ich das so überblicken kann. Da hat sich seit dem dann doch vieles getan.
Ja, ist auch nicht gerade aktuell. Aus meiner Erfahrung zur Produktivitaet und Qualitaet kommt das gesagte auf jeden Fall hin - was der Punkt ist, den ich unterstreichen will.
Fuer eigene Performance-Vergleiche fehlen mir Implementierungen in Python und Ruby...

maximAL
2011-04-03, 23:35:11
Hmmm, diese Studie ist von 2002 wenn ich das so überblicken kann. Da hat sich seit dem dann doch vieles getan.
Ich könnte wetten, dass die Compiler/VMs der "Skriptsprachen" sowie Java inzwischen größere Fortschritte als die C-Compiler gemacht haben.

Coda
2011-04-04, 01:42:52
Naja, C++/CLI-Code läuft angeblich auf der CLR immer noch schneller als äquivalenter C#-Code. Die Microsoft-Leute meinten, dass das daran liegt, das der C++-Compiler immer noch besser optimiert. Das schlägt offenbar trotz den Optimierungen des JITC durch. Wahrscheinlich weil der nur sehr lokal optimieren kann.

Aber VMs holen definitiv auf und sind in vielen Bereichen sogar überlegen. Mir gefällt durch die Garbage Collection vor allem, dass Speicherallozierung sehr billig ist. Man kann also eher auch mal viele Objekte benutzen.

Tiamat
2011-04-04, 07:24:00
Als ganz anderen Ansatz würde ich das nicht bezeichnen. Es ist eine Optimierungsstrategie unter vielen, nicht die fortschrittlichste, neueste und oft auch nicht die beste.


Ich bin gespannt zu erfahren, was das neuste, beste und fortschrittlichste ist ?

Simon
2011-04-04, 09:23:27
Ich könnte wetten, dass die Compiler/VMs der "Skriptsprachen" sowie Java inzwischen größere Fortschritte als die C-Compiler gemacht haben.
Das glaub ich gern. Wobei hier noch belegbare Zahlen fuer fehlen ;(

Coda
2011-04-04, 10:59:08
Es gibt leider nirgends im Netz Benchmarks zu der Performance von Java über die Jahre. Zumindest hab ich nix gefunden. Das hat mich letztens nämlich auch interessiert :(

Odal
2011-04-04, 20:07:26
Ich denke nicht das die VM seit Java2 noch grossartige Performancezuwachse vorzuweisen hat. Interessant wäre es aber schon dies mal zu evaluieren.

Benchmarks zu 0815 Zeugs über diverse Sprachen gibts z.b. hier (http://shootout.alioth.debian.org/)

Allgemeine Aussagekraft ist natürlich eher weniger gegeben, da diese absolut Anwendungsfall abhängig ist.

Coda
2011-04-05, 00:54:03
Ich denke nicht das die VM seit Java2 noch grossartige Performancezuwachse vorzuweisen hat.
Da wette ich sehr viel dagegen.

Aquaschaf
2011-04-05, 07:55:42
Ich bin gespannt zu erfahren, was das neuste, beste und fortschrittlichste ist ?

Gar keine? Es gibt nicht die beste Strategie. Neuer sind beispielsweise support vector machines.

Shink
2011-04-05, 09:07:19
Es gibt leider nirgends im Netz Benchmarks zu der Performance von Java über die Jahre. Zumindest hab ich nix gefunden. Das hat mich letztens nämlich auch interessiert :(
Alt (2002) aber besser als nichts: Java 1.0 bis 1.4
http://java.coe.psu.ac.th/FreeOnline/Evaluating%20Java%20for%20Game%20Development.pdf

Ich denke nicht das die VM seit Java2 noch grossartige Performancezuwachse vorzuweisen hat.
Java 1.3 hat den HotSpot-Compiler eingeführt, mit Java 1.4 wurde diese Technik verbessert und mit nio eine Library für Low-Level I/O-Operationen eingeführt - diese wurde auch im Rest der System Library mehr oder weniger konsequent eingesetzt (z.B. AWT) was somit auch bisherige Programme schneller macht.

Tja, und weiter weiß ich nicht.:freak:
Denn spätestens dann wusste man dank Projekten wie Jake2 (http://bytonic.de/html/benchmarks.html) dass die Wahl zwischen C++, C# oder Java für die Performance der meisten Projekte ein relativ nebensächlicher Aspekt ist.

Ganon
2011-04-05, 10:05:34
Es wird immer an der Performance gearbeitet. Sei es nun der Garbage-Collector, der Hotspot-Compiler oder allgemein den mitgelieferten Libraries. Weiß nicht was schon eingebaut wurde, aber bei OpenJDK gibt's auch mehrere Projekte, die die Performance steigern (z.B. kein ständiger Check der Array-Grenzen)

Abe Ghiran
2011-04-05, 20:20:25
Ich bin gespannt zu erfahren, was das neuste, beste und fortschrittlichste ist ?
Da ja auch Genetische Algorithmen (sic) genannt wurden und von Optimierungsstrategien die Rede war, hier das neueste, beste und fortschrittlichste im Bereich randomisierter Suchheuristiken zur Black Box Optimierung:
Einkriteriell, reell: CMA-ES (http://www.lri.fr/~hansen/index.html)
Mehrkriteriell, reell: SMS-EMOA (http://ls11-www.cs.uni-dortmund.de/rudolph/hypervolume/start#sms-emoa)
Diskret oder reell, starkes Rauschen, extrem teure FA: SPO (http://gociop.de/research-projects/spot/)

Grüße,
Jan

Tiamat
2011-04-05, 20:45:07
Gar keine? Es gibt nicht die beste Strategie. Neuer sind beispielsweise support vector machines.

Die verwendete Technik ist genau das gleiche wie ein 2 bzw. Multilayer-Perzeptron von 1958, was wiederum ein vereinfachtes neuronales Netz ist.

@Abe: Danke das schau ich mir mal an.

ENKORE
2011-04-05, 20:57:47
Mir gefällt durch die Garbage Collection vor allem, dass Speicherallozierung sehr billig ist. Man kann also eher auch mal viele Objekte benutzen.
Pooling kann ich in fast jeder Sprache machen. Wenn ich mir 'nen Boost Speicherpool nehme, ist der auch garantiert schneller als der Java-Standardpool, aber darum gehts eigentlich nicht.
Allozierungen werden meistens in der Initialisierungsphase durchgeführt und sind damit für die Perfomance weitestgehend irrelevant.

Fakt ist doch, dass im Tupel C/C++/Java/.NET die Perfomance im meist irrelevanten Bereich abweicht.
Und wenns wirklich schnell gehen muss und das Problem sich in atomic operations (<- heisst das in diesem Kontext so?) einteilbar ist, dann kann man sich auch mal GPGPU (=> OpenCL) anschauen. Das ist aber wirklich keine normale Programmierung mehr, man sollte im Idealfall schonmal GLSL Shader geschrieben haben, das ist an sich wohl recht ähnlich (von der API her).

Just my 2 cents.

Senior Sanchez
2011-04-05, 21:08:08
Die verwendete Technik ist genau das gleiche wie ein 2 bzw. Multilayer-Perzeptron von 1958, was wiederum ein vereinfachtes neuronales Netz ist.

@Abe: Danke das schau ich mir mal an.

Naja, die Urväter der SVMs à la neuronale Netze nutzten aber noch keinen Kernel-Trick, wenn ich mich recht erinnere.

Du hast aber Recht, dass es grundsätzlich das gleiche ist.

Entscheidungsbäume sind aber übrigens so eine Sache, die in gewissen Situationen eben neuronalen Netzen vorgezogen werden.