Forum: Ausbildung, Studium & Beruf Bachelorarbeit - Schach Engine


von Es (Gast)


Lesenswert?

Hallo.

Ich bin zwar noch nicht ganz so weit, aber in nicht allzu ferner Zukunft 
muss ich ja mal meine Bachelorarbeit schreiben. Ich studiere Informatik 
an einer TU und hab mir so meine Gedanken gemacht, wie das ganze 
ablaufen wird. Ich beschäftige mich privat gerade damit, eine 
Schachengine in C (Programmiersprache) zu programmieren und diese zu 
optimieren. Dabei wird eine Menge an Code und Algorithmen anfallen. Eine 
Schachengine ist nebenbei bemerkt ein Programm, dass Schach spielen kann 
und die "besten" Züge analysiert & findet, in der Regel dabei sogar 
stärker ist als jeder menschliche Großmeister.


Jetzt kam bei mir die Frage auf, ob ich das einfach später als meine 
Bachelorarbeit verpacken kann. Ist es möglich, dass man bei der 
Bachelorarbeit einfach sein eigenes Thema auswählt? Es gibt ja schon 
sehr viele Schachengines (Stockfish, Fritz, Crafty, Komodo etc.), ich 
erfinde das Rad nicht neu. Allerdings ist es schon relativ 
fortgeschritten so etwas zu programmieren und die ganzen Konzepte 
dahinter anzuwenden, zudem habe ich irgendwo vernommen, dass man bei der 
Bachelorarbeit nichts "neues" erfinden muss. Reicht sowas aus? Wäre 
natürlich ziemlich geil, wenn ich jetzt schon die "Vorarbeit" für meine 
Bachelorarbeit fertig machen würde.

Danke für jede Hilfe!

von 50c (Gast)


Lesenswert?

Es schrieb:
> Eine
> Schachengine ist nebenbei bemerkt ein Programm, dass Schach spielen kann
> und die "besten" Züge analysiert & findet,

...ach nee, wirklich?

Es schrieb:
> in der Regel dabei sogar
> stärker ist als jeder menschliche Großmeister.

...ok, wusste ich nicht, dass es da so viele gibt, die besser als (ich 
;-) und) GMs sind ;-)

Es schrieb:
> Ist es möglich, dass man bei der
> Bachelorarbeit einfach sein eigenes Thema auswählt?

was sagt dein Prof dazu?

Es schrieb:
> Allerdings ist es schon relativ
> fortgeschritten so etwas zu programmieren und die ganzen Konzepte
> dahinter anzuwenden,

...meinst du! Schon mal richtig(!) Schach (auch gegen eine "Maschine") 
gespielt?

Es schrieb:
> Reicht sowas aus?

wenn man denn "umsonst" seinen Abschluss (Bachelore ist einer, ist mir 
neu...;-)...) machen will...

Es schrieb:
> Reicht sowas aus?
...dann sollte der Prof schon sehr dement sein!

...kannst du überhaupt Schach spielen? Wahrscheinlich nicht,. denn sonst 
würdest du nicht solch bekl...p...t... Fragen stellen!

von Gerald M. (gerald_m17)


Lesenswert?

Bachelorarbeiten bei MINT Fächer sollen meist Hilfen sein um aktuelle 
Forschung oder Entwicklung  voranzutreiben.
Die Wahrscheinlichkeit, dass du jemanden findest, der etwas, was du 
zuhause aus Spaß für dich gemacht hast, als Bachelorarbeit durchwinkt, 
halte ich für sehr gering.

von Nop (Gast)


Lesenswert?

Es schrieb:
>  Reicht sowas aus?

Das ist natürlich eine Frage an Deinen Prof, die Dir hier auch keiner 
beantworten kann.

Abseits der reinen Spielstärke gibt's aber schon deutliche Unterschiede. 
Schau Dir mal den Sourcecode von Gull an und dann von Demolito - beide 
in C, beide von der Spielstärke her ganz gut, aber bei einem studierten 
Informatiker wüßte ich, bei welchem von beiden ich Respekt hätte und wem 
ich das um die Ohren hauen würde.

von Es (Gast)


Lesenswert?

@50c

Danke für deinen debilen Beitrag.

@Gerald M.

Huh? Seit wann das denn? Die Bachelorarbeiten, die ich jetzt so gesehen 
habe, bestehen nur aus Recherche und wiedergeben dessen, was man in 
anderen Quellen gelesen hat. Hab sogar irgendeine gefunden, in der 
jemand einen Film angeschaut und anschließend analysiert hat. Dafür gab 
es dann den Bachelor, aber ist auch kein MINT, klar. Trotzdem, ist das 
ziemlich aussagekräftig dafür, was diese Arbeit doch eigentlich ist. Von 
Forschung voranbringen kann man bei der Bachelor-Thesis doch wirklich 
nicht sprechen?! Man kann sich im Internet diverse Arbeiten 
herunterladen und sich selbst davon überzeugen.

von Karl (Gast)


Lesenswert?

Höhr nicht auf die Dummschwätzer. Das Theme der Bachelorarbeit ist egal. 
Auf das Anwenden deiner wissenschaftlichen Kompetenz kommt es an. Ohne 
dich ausbremsen zu wollen, bist du die sicher, dass du dazu in der Lage 
bist? Namenhafte Unternehmen haben für solche "Späße" Mio. von Dollar 
ausgegeben, bis sie eine "brauchbare" Lösung hatten.

von Peter (Gast)


Lesenswert?

Du musst Dir überlegen, was Deine Schachengine von anderen 
unterscheidet, dass sie für einen Lehrstuhl interessant sein könnte.

Verwendest Du z.B. einen besonderen Algorithmus oder Datenstruktur, 
der/die bisher noch nicht in Schachengines verwendet wird? Dann könnte 
das inkl. Vergleich mit bestehenden Lösungen für einen 
Algorithmen-Lehrstuhl interessant sein.

Benutzt Du ein neues Entscheidungsmodell, das die menschliche Psyche und 
Denkfehler mit einbezieht, dann könnte es für Spieltheorie- oder 
Psychologie-Lehrstühle interessant sein.

Nutzt Du eine besondere Programmiersprache, Compiler, ungewöhnliche 
Zielhardware oder besondere Software-Engineering-Methoden, dann könnte 
es bei Lehrstühlen, die sich mit diesen Themen beschäftigen, reinpassen.

Eine 08/15-Schachengine, die das gleiche wie alle anderen kann, nur in 
schlechter und langsamer, wird dagegen wenig Anklang finden.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Ich geht dann mal den Beitrag als Trollversuch melden.

von C. A. Rotwang (Gast)


Lesenswert?

Es schrieb:

> Jetzt kam bei mir die Frage auf, ob ich das einfach später als meine
> Bachelorarbeit verpacken kann. Ist es möglich, dass man bei der
> Bachelorarbeit einfach sein eigenes Thema auswählt? Es gibt ja schon
> sehr viele Schachengines (Stockfish, Fritz, Crafty, Komodo etc.), ich
> erfinde das Rad nicht neu. Allerdings ist es schon relativ
> fortgeschritten so etwas zu programmieren und die ganzen Konzepte
> dahinter anzuwenden,

Nö, das ist kalter Kaffee, das war Stoff für die Jugendillustrierten 
meiner Flegeljahre:
http://kc85-museum.de/diverses/verschiedene/schachcomputer/sc2/jugendtechnik/seite1.jpg
http://kc85-museum.de/diverses/verschiedene/schachcomputer/sc2/jugendtechnik/seite2.jpg
http://kc85-museum.de/diverses/verschiedene/schachcomputer/sc2/jugendtechnik/seite3.jpg

 Früher als wir Schachprogramme auf 8bit Rechnern wie Z80 in Assembler 
geschrieben haben, mag das noch Ansrpuchsvoll gewesenen sein, aber heute 
ist jede Drohnensteuerung anspruchsvoller da unter Echtzeitbedingungen.

von Es, es, es und es, es ist ein harter Schluss (Gast)


Lesenswert?

Wobei diese Kiste, bzw. deren Programm mehrere heftige Programmfehler 
hat.


Wenn du sie beseitigen kannst und dann damit ein GM Niveau ereichsts, 
dann hat es was. Wenn nicht, dann lass es sein.

von Wühlhase (Gast)


Lesenswert?

Lass dich von den Trollhasen hier nicht zu sehr runterziehen.

Das Thema einer Bachelorarbeit ist völlig egal. Und die, die ihre 
Bachelorarbeit in irgendeinem Institut als Handlanger irgendeines Profs 
schreiben der zu beschäftigt/faul für die Recherche seiner eigenen 
Forschung ist, können einem oft Leid tun.

Das Einzige was zählt ist, einen Prof zu finden, der bereit ist deine 
Arbeit zu betreuen und zu bewerten. Zumindest an meiner Hochschule muß 
das nichtmal ein Prof aus dem eigenen Studiengang sein.

Such dir einen Prof, dem akademische Blendgranaten möglichst egal sind 
(das sind auch meist die, die fachlich viel drauf haben), frag ob er 
Zeit und Lust hat deine BA zu betreuen und gut ist. Es gibt Profs denen 
macht es Freude zu sehen, wenn ihre Studenten mit Herzblut an ihr Thema 
gehen. Es interessiert keine Sau, von wem das Thema vorgegeben wird. 
Außer jenen, die billige Arbeitskräfte suchen damit sie den Ruhm dieser 
Jenen in die Welt hinaustragen.
Und solche BAs machen weder zu Schreiben noch zu Lesen wirklich Freude, 
sodass der Wert der BA fragwürdig wird...

von Base64 U. (6964fcd710b8d77)


Lesenswert?

Es schrieb:
> Ist es möglich, dass man bei der
> Bachelorarbeit einfach sein eigenes Thema auswählt?

Frag deinen Supervisor. Ich habe mir ein eigenes Thema gesucht das ich 
für eine Firma behandle, Supervisor war damit happy. Natürlich musst du 
Rücksprache halten da dein Supervisor das ganze benotet und dir sagen 
muss ob und wie du das Thema behandeln musst.

> ich
> erfinde das Rad nicht neu.

Das muss kein Hals und Beinbruch sein, ich mach eine 
Markübersucht/Produktentwicklung.

> Reicht sowas aus?

Frag deinen Supervisor. Du musst hald einen strikten top down approach 
verwenden. Und es wäre ratsam das Projekt vorher nirgends anderst zu 
veröffentlichen.

Wenn du krampfhaft ein hässliches Baby zu deiner Bachelorarbeit umformen 
willst wirst du und dein Supervisor vermutlich nicht happy am Ende.

von Michael B. (laberkopp)


Lesenswert?

Es schrieb:
> Jetzt kam bei mir die Frage auf, ob ich das einfach später als meine
> Bachelorarbeit verpacken kann.

Jein, es darf keiner Wissen, daß sie schon vorher fertig war. Aber 
Kenntnisse von vorher darf man natürlich einbringen.

> Ist es möglich, dass man bei der
> Bachelorarbeit einfach sein eigenes Thema auswählt?

Ja. Bloss ob dein Prof/Betreuer gerade Schach als Thema akzeptiert, 
weisst du noch nicht.

> Es gibt ja schon
> sehr viele Schachengines (Stockfish, Fritz, Crafty, Komodo etc.), ich
> erfinde das Rad nicht neu. Allerdings ist es schon relativ
> fortgeschritten so etwas zu programmieren und die ganzen Konzepte
> dahinter anzuwenden, zudem habe ich irgendwo vernommen, dass man bei der
> Bachelorarbeit nichts "neues" erfinden muss.

Richtig. Bachelor ist die Ausbildung zum aktuellen Stand der Technik. 
Darüberhinausgehende Forschung erlernt man erst im Master.

von 2⁵ (Gast)


Lesenswert?

Warum nicht? Du musst halt einen Prof finden, der mitmacht. Für eine 
Bachelor Arbeit wäre das schon ok. ABER:

1) Entscheidend für die Note wäre nicht (oder nur im geringeren Maße) 
die erreichte Spielstärke, sondern vor allem der saubere, innere Aufbau 
und die ordentliche Dokumentation (Literaturrecherche, vergleichen der 
möglichen Algorithmen, Implementation usw.)
2) Ich würde einen objektorientierten Ansatz verlangen, also C++ oder 
C#/Mono, oder evtl. auch Rust/nim, swift usw.

von Nop (Gast)


Lesenswert?

2⁵ schrieb:

> 2) Ich würde einen objektorientierten Ansatz verlangen

Was macht OOP denn in besonderem Maße geeignet? OOP nur verwenden um OOP 
willen hat man im Hype der 90er mal gemacht.

von Xx (Gast)


Lesenswert?

Oop abzulehnen kann nur von einem nicht-itler kommen...

von C. A. Rotwang (Gast)


Lesenswert?

Xx schrieb:
> Oop abzulehnen kann nur von einem nicht-itler kommen...

Oder von einem, der sich um effiziente Echtzeit-Programmierung bemüht 
und OOP diesbezüglich auf den Prüfstand stellt.

Mich würde mal daher mal interessieren, ob bspw. eine Coptersteuerung 
besser in C++ oder C programmierbar ist. Schachengine ist diesbezüglich 
ein schlechter Benchmark, weil die Aufgabenstellung weder nach Echtzeit 
verlangt noch die Ressourcen beschränkt sind. Dann gewöhnt sich der 
Student noch an resourcenverschleudernd zu programmieren, weil er noch 
nicht in der Lage ist den "Preis" für "akademisch saubere" Software 
einzuschätzen.

von fp am Morgen (Gast)


Lesenswert?

Die Bachelorarbeit ist DAS Zeugnis, das Du beim Einstellungsgespräch 
mitbringst. Ob Du mit 10 in Latein ne 1 hattest spielt keine Rolle.

Und Du machst den Bachelor ja nicht zum Spaß, sondern als Einstieg in 
die Berufswelt.

von klausi (Gast)


Lesenswert?

Ja, also der Ansatz mit C Schach-Algorithmen nachzubilden, reicht wohl 
nicht mehr heutzutage. Da gibt es ja schon zuhauf Varianten.

In der heutigen Zeit wäre es in einer Bachelor-Arbeit doch viel 
interessanter ein "lernendes Modell" zu untersuchen. Also AI Algorithmen 
angewandt im Bereich eines Schachspiels.

Daraus würde sich für mich z.B. eine interessante Problemstellung 
ergeben:

Schlägt ein herkömmlicher Algorithmus oder ein Schachprogramm auf z.B. 
Stufe ELO x1 ein AI Programm, also Modell, das von einem prof. 
Schachspieler auf ähnlicher Stufe ELO x1 trainiert wurde. Lass x1 z.B. 
2000, das ist schon ein gutes Niveau. Nehme an, dass Du nicht auf der 
Stufe spielst, deswegen bräuchtest du eine Person, die dir hilft. Oder 
du kannst das Experiment auf deiner Stufe (=?) machen.

Danach, könntest du hypothetisch beide Modelle gegeneinander antreten 
lassen (in welcher Form auch immer CPU vs. CPU). Nach vielen Spielen 
könntest du dir die Statistik berechnen, z.B. um eine Signifikanz zu 
ermitteln.

Du könntest z.B. theoretische Grundansätze, Machbarkeit, fundierte 
Erkenntnisse usw. in einer Bachelorarbeit ermitteln und dann in der 
Masterarbeit das ganze ausbauen...

Das wäre schon eher was z.B. ein Thema, was auch mich interessieren 
würde, und vielleicht viele andere. Da gab es ja das Spin off, das 
Google gekauft hatte, denke es heisst wohl DeepMind, wo ein realer 
Spieler gegen einen AI - Gegner antrat.

von hänschen (Gast)


Lesenswert?

Ich habe letztens auf youtube einen Evolutions-Simulator gesehen. 
Vielleicht könntest du damit etwas machen. Dieser Typ hat eine bestimmte 
Art von beweglichem Objekt mit einer recht übersichtlichen Software 
simuliert - da gibt es aber noch viel mehr das man simulieren könnte.

von klausi (Gast)


Lesenswert?

Hier ein paar gute Ansätze,  zum Nachdenken, Ausprobieren, Coden

https://qz.com/502325/an-ai-computer-learned-how-to-beat-almost-anyone-at-chess-in-72-hours/

https://medium.freecodecamp.org/simple-chess-ai-step-by-step-1d55a9266977

So etwas wäre für mich ein heisses Thema :-)
Kann man super in einer Bachelorarbeit untersuchen, such mal bei deiner 
Uni / Lehrstühlen nach Forschung in verwandten Gebieten und knüpfe dort 
an. Professoren sind begeistert über etwas Eigeninitiative.

von Nop (Gast)


Lesenswert?

Xx schrieb:
> Oop abzulehnen kann nur von einem nicht-itler kommen...

Umgedreht wird ein Schluß draus: OOP als einzig angebrachtes Paradigma 
zu sehen kann nur von Java-Geschädigten kommen, die dann auch nicht in 
der Lage sind, die Paradigmenwahl sachlich zu begründen, sondern direkt 
zu ad hominem greifen.

Stockfish beispielsweise gibt's in C++ (wobei da aber nicht wahllos mit 
C++-Features herumgesaut wird, nur weil sie existieren und cool sind) 
und als C-Port, der übrigens etwas schneller ist, aber nicht viel. Und 
als Assemblerport, der deutlich schneller ist als beide.

Was es hingegen so gut wie gar nicht gibt, sind Engines in funktionalen 
Sprachen, und wenn, dann eher als Spielzeug-Engines. Das kommt daher, 
daß "state is evil" zu sehr viel Kopiererei führt, was die Performance 
in den Keller zieht.

Kurioserweise gibt's auch kaum etwas in Lisp, obwohl Lisp erstens im 
ersten KI-Zyklus prominent war und Schach damals als das Paradebeispiel 
der ganzen Disziplin galt.

Insofern wäre bei einer Bachelor-Arbeit auch interessant, welches 
Paradigma sich aus welchen Gründen überhaupt eignet oder auch nicht. 
Ohne weitere Begründung "muß OOP sein" ist da schon ziemlich flach.


C. A. Rotwang schrieb:

> Schachengine ist diesbezüglich
> ein schlechter Benchmark, weil die Aufgabenstellung weder nach Echtzeit
> verlangt noch die Ressourcen beschränkt sind.

Die Ressourcen sind immer beschränkt, denn wenn man zwei Engines hat, 
die exakt dasselbe machen, aber die eine bekommt das in der halben Zeit 
hin, dann ist letztere Engine stärker und wird bei statistisch gesehen 
ausreichend langen Matches mit Sicherheit gewinnen.

Deswegen gibt es ja einen Assemblerport von Stockfish.

> Dann gewöhnt sich der
> Student noch an resourcenverschleudernd zu programmieren, weil er noch
> nicht in der Lage ist den "Preis" für "akademisch saubere" Software
> einzuschätzen.

Wobei ich da nicht zwingend einen Konflikt sehe. Wie Knuth es schon 
populär gemacht hat: "premature optimization is the root of all evil." 
Im Wesentlichen, weil man bei sauber geschriebener Software wesentlich 
leichter Optimierungen auf algorithmischer Ebene vornehmen kann, die vom 
Gewinn her deutlich über den Mikro-Optimierungen liegen.

Auch ein noch so genial zusammengehackter Bubblesort wird bei größeren 
Datenmengen immer einem akademisch geschriebenen Heapsort unterlegen 
sein.

von Klomann (Gast)


Lesenswert?

Es schrieb:
> Danke für jede Hilfe!

Mach ne vergleichende Arbeit verschiedener Engines und deren 
Kernkonzepte,
das reicht oft für ne Bachelorarbeit. Wenn es nicht reicht spinne ein 
paar eigene Konzepte zusammen, und wenn es nur ein verbessertes 
Protokoll ist mit dem sie mit der Aussenwelt kommunizieren oder nen 
Schachserver zur Einbindung verschiedener Engines, ...

Rein an eine Engine würde ich mich nicht wagen wenn ich da nicht schon 
nebenher schon was gemacht hätte, Verbesserungen sind nur schwer messbar 
oder mit viel Aufwand oder du hast nen völligen anderen Ansatz den man 
mal anhand eines Prototypen untersuchen will.

von Nop (Gast)


Lesenswert?

Klomann schrieb:
> und wenn es nur ein verbessertes
> Protokoll ist mit dem sie mit der Aussenwelt kommunizieren

Das wäre so ziemlich das Letzte, was sinnvoll wäre, denn die Hauptstärke 
eines Protokolls ist seine Verbreitung, weil man das dann leicht in jede 
GUI einbinden kann. Mit einem neuen Proptokoll müßte man dann auch noch 
eine GUI oder Testumgebung selber programmieren, und das alles ohne 
jeden Nutzen.

Es gibt zwei Protokolle, Winboard und UCI, und letzteres hat sich auf 
breiter Front durchgesetzt.

Winboard wird (abgesehen von Crafty, aus historischen Gründen) nur noch 
von Anfängern eingesetzt, aus dem einzigen Grund, weil die Engine 
während des Rechnens keine Kommandos verarbeiten können muß, so daß man 
das ohne Threading realisieren kann.

> oder nen Schachserver zur Einbindung verschiedener Engines,

Gibt's seit Ewigkeiten.

von Michael B. (laberkopp)


Lesenswert?

Nop schrieb:
> Umgedreht wird ein Schluß draus: OOP als einzig angebrachtes Paradigma
> zu sehen kann nur von Java-Geschädigten kommen, die dann auch nicht in
> der Lage sind, die Paradigmenwahl sachlich zu begründen, sondern direkt
> zu ad hominem greifen.
>
> Stockfish beispielsweise gibt's in C++ (wobei da aber nicht wahllos mit
> C++-Features herumgesaut wird, nur weil sie existieren und cool sind)
> und als C-Port, der übrigens etwas schneller ist, aber nicht viel. Und
> als Assemblerport, der deutlich schneller ist als beide.
>
> Was es hingegen so gut wie gar nicht gibt, sind Engines in funktionalen
> Sprachen, und wenn, dann eher als Spielzeug-Engines. Das kommt daher,
> daß "state is evil" zu sehr viel Kopiererei führt, was die Performance
> in den Keller zieht.
>
> Kurioserweise gibt's auch kaum etwas in Lisp, obwohl Lisp erstens im
> ersten KI-Zyklus prominent war und Schach damals als das Paradebeispiel
> der ganzen Disziplin galt.

Prust, wenn man nicht informiert ist...

Gerade in Lisp gibt es eine sehr saubere Schach-Implementation, 
Bachelorarbeitswürdig:

http://www.iqool.de/Chennai---Ein-Schachprogramm-in-Common-Lisp.html

von 2⁵ (Gast)


Lesenswert?

Nop schrieb:
> Was macht OOP denn in besonderem Maße geeignet? OOP nur verwenden um OOP
> willen hat man im Hype der 90er mal gemacht.

Ich denke, eine Schach Engine kann man sehr gut in C programmieren. OOP 
würde ich verlangen, da es eine Abschlussarbeit eines Informatikers ist.
Gerade ein Informatiker sollte in seiner Abschlussarbeit zeigen, dass er 
OOD kann, zumal es keine Arbeit bei einer Firma ist. IMHO geht es bei 
einer Abschlussarbeit ohne externen Bezug nicht primär ums Ergebnis, 
sondern wie das Ergebnis erreicht wurde. Grad bei einem Thema wie z.B. 
eine Schach-Engine, bei der nicht mehr an Hochschulen geforscht wird, 
wird man mehr Augenmerk auf die Umsetzung legen. Würde das Thema jetzt 
auf eine konkrete Umsetzung auf einen µC erweitert werden, dann könnte 
man IMHO wieder über plain C reden.
Aber eine Engine auf einem PC, da sollte ja auch ein bisschen GUI dabei 
sein. Will man dann wirklich eine Informatiker das in C programmieren 
lassen? Ich sage ja nicht, dass dies nicht geht, habe ich vor 30 Jahren 
ja selbst gemacht. Aber ein frisch Ausgebildeter sollte hier in OOD 
bewandert sein und dies auch in seiner Abschlussarbeit zeigen sollen!

Was anderes ist es, wenn man die Arbeit extern erfolgt oder wenn intern 
davon profitiert wird, z.B. bei hausinternen Tools, Online-Systemen oder 
Lernumgebungen. All das sehe ich hier nicht.

von 2⁵ (Gast)


Lesenswert?

Nop schrieb:
> Insofern wäre bei einer Bachelor-Arbeit auch interessant, welches
> Paradigma sich aus welchen Gründen überhaupt eignet oder auch nicht.
> Ohne weitere Begründung "muß OOP sein" ist da schon ziemlich flach.

Dies wäre natürlich noch mehr einer Abschlussarbeit würdig, da dies ja 
fast impliziert, Engines in verschiedenen Paradigmen aufzubauen und dann 
zu vergleichen. Eine Plain-C Engine ohne diese Diskussion wäre aber für 
einen Informatiker (IMHO) noch flacher...

von Nop (Gast)


Lesenswert?

Michael B. schrieb:

> Prust, wenn man nicht informiert ist...

Ja, so wie Du.

> Gerade in Lisp gibt es eine sehr saubere Schach-Implementation

Das ist eine Spielzeug-Engine, die dermaßen schwach spielt, daß sie in 
der CCRL nichtmal auftaucht. Es reicht gerade mal für einen Negamax. 
Genau das ist aber typisch für LISP-Engines, daß sie rudimentär 
implementiert und dann aufgegeben werden.


2⁵ schrieb:

> Ich denke, eine Schach Engine kann man sehr gut in C programmieren. OOP
> würde ich verlangen, da es eine Abschlussarbeit eines Informatikers ist.

OOP hat seine Stärken da, wo man tatsächlich Objekte hat, und das sind 
wenig überraschend GUIs und Simulationen, aus letzterem kam OOP ja mal 
her. Wenn man jetzt in anderen Bereichen OOP nur um seiner selbst willen 
verlangt, dann ist das absehbare Ergebnis, daß die eigentlichen Stärken 
nicht ausgenutzt werden, weil sie in dem Kontext eben nicht vorhanden 
sind.

Beispielsweise ist GUI-Programmierung in reinem C möglich, habe ich auch 
schon gemacht, aber den Horror will man sich einfach nicht antun.

Man kann natürlich bei einer Schach-Engine z.B. ein Springer-Objekt 
haben, aber dann verflacht OOP zu syntaktischem Zucker, weil die Objekte 
quasi-statisch sind. Daraus wäre meine Schlußfolgerung, wenn schon OOP 
gefordert wird, dann als Arbeit lieber eine Simulation von irgendwas zu 
machen, denn GUIs sind ja heute auch schon langweilig.

> Würde das Thema jetzt
> auf eine konkrete Umsetzung auf einen µC erweitert werden, dann könnte
> man IMHO wieder über plain C reden.

Wäre sogar eine Option, wenn man die Ein/Ausgabe einfach über SIO macht 
und sich damit die ganze Oberfläche spart. Interessant wäre auch ein 
Netzwerk von mehreren Controllern, die z.B. über CAN gekoppelt sind, und 
wo dann die Engine auf mehreren Knoten verteilt läuft. Da hat man dann 
auch schon Aspekte von Systemdesign dabei. Aber vielleicht Overkill für 
eine Bachelor-Arbeit.

> Aber eine Engine auf einem PC, da sollte ja auch ein bisschen GUI dabei
> sein. Will man dann wirklich eine Informatiker das in C programmieren
> lassen?

GUI-Programmierung wäre (auch mit OOP) ein wenig so, als würde man einen 
Maschbauer daran messen, ob er eine Feile richtigherum halten kann.

von Es (Gast)


Lesenswert?

Zur Programmiersprache:

Es wäre kein Problem, die Engine von C in C++ umzuschreiben, sobald ich 
fertig bin.Schneller/Stärker wird sie dadurch allerdings nicht. 
Stockfish wird in C++ höchstwahrscheinlich entwickelt, weil C++ sich 
sehr gut eignet, wenn man in einem großen Team arbeitet. Und Stockfish 
hat nun einmal über 100 Devs, die ständig Änderungen einführen. Für ein 
1-Mann-Team ist dieses Argument allerdings hinfällig.

Zur Spielstärke von meiner Engine:

Bei meiner Engine peile ich eine Spielstärke von ca. 3000 Elo an. Der 
beste menschliche Spieler (Magnus Carlsen liegt momentan bei 2826). Das 
liegt über dem Niveau von diesen alten Schachcomputern, die C. A. 
Rotwang da in seinem Beitrag anspricht.

Zum Aufbau des Codes:

Natürlich werde ich peinlich genau darauf achten, dass ich sauber 
arbeite. Jeder Abschnitt wird kommentiert werden, alles wird schön in 
separate Dateien aufgeteilt, wie das auch bei dem Code von Demolitio 
(von Nop angesprochen) der Fall ist. So eine einzige Datei, in der 
tausende Zeilen an Code unkommentiert untereinander geklatscht worden 
sind wie bei Gull, wird hier nicht passieren. Aber ich glaube das ist 
auch selbstverständlich.

Zur Einzigartigkeit meiner Engine:

Ja, also ich hätte erst einmal geplant verschiedene Methoden zur 
Stellungsbewertung aus anderen Engines zu kombinieren. Natürlich ist das 
kein neuer großer Wurf. Wie gesagt, ich dachte, dass man bei der 
Bachelorarbeit sowieso nichts neues erfinden muss. Die Frage ist 
natürlich, ob ich einen Betreuer von dieser Idee überzeugen kann.

Ansonsten schaue ich mir auch mal diese AI-Engines an. Es gab da auch 
mal ein Beispiel. Matthew Lai hat für seine Master-Thesis die 
Schachengine "Giraffe" entwickelt, die auf diesem AI-Prinzip basiert. 
Gegen sich selbst spielen und dabei an Spielstärke gewinnen. Dieser 
Matthew Lai wurde danach sofort bei Deep Mind (Google) angestellt, die 
Alpha Go entwickelt haben. ;)

Ob ich jetzt in meiner Bachelorarbeit das Gleiche leisten soll/muss, wie 
in dieser "prominenten" Masterarbeit, ist natürlich fragwürdig.

von Nop (Gast)


Lesenswert?

2⁵ schrieb:

> Dies wäre natürlich noch mehr einer Abschlussarbeit würdig, da dies ja
> fast impliziert, Engines in verschiedenen Paradigmen aufzubauen und dann
> zu vergleichen.

Dann wäre auch eine Spielzeug-Engine wieder eine Option, denn solange 
man dasselbe prozedural, objektorientiert und funktional aufbaut, muß es 
ja nicht stark spielen, um vergleichbar zu sein (also in punkto 
Performance und auch Entwicklungszeit). Als Informatiker sollte man ja 
auch mit funktionalen Sprachen etwas anfangen können, auch wenn eine 
Schach-Engine da keine sonderlich dankbare Anwendung ist.

von Es (Gast)


Lesenswert?

Ja, ich kann auch in Haskell (funktionale Programmiersprache) 
programmieren. Allerdings werde ich in Haskell ganz sicher keine 
Schach-Engine schreiben. ;)

von chess-player (Gast)


Lesenswert?

Es schrieb:
> Ja, also ich hätte erst einmal geplant verschiedene Methoden zur
> Stellungsbewertung aus anderen Engines zu kombinieren. Natürlich ist das
> kein neuer großer Wurf. Wie gesagt, ich dachte, dass man bei der
> Bachelorarbeit sowieso nichts neues erfinden muss. Die Frage ist
> natürlich, ob ich einen Betreuer von dieser Idee überzeugen kann.

Nein, dadurch erfindest du nix neues, aber einfach so den Code anderer 
open source engines zu kopieren und zu vergleichen ist keine 
Eigenleistung und damit nicht Bachelor würdig.

Es schrieb:
> Bei meiner Engine peile ich eine Spielstärke von ca. 3000 Elo an.

Soso, du willst also innerhalb von 6 Monaten eine Schach engine von Null 
auf aufbauen, und gleich mal eine Elo von 3000 zu erreichen. Troll doch 
weiter...

von C. A. Rotwang (Gast)


Lesenswert?

Es schrieb:

> Zur Spielstärke von meiner Engine:
>
> Bei meiner Engine peile ich eine Spielstärke von ca. 3000 Elo an. Der
> beste menschliche Spieler (Magnus Carlsen liegt momentan bei 2826). Das
> liegt über dem Niveau von diesen alten Schachcomputern, die C. A.
> Rotwang da in seinem Beitrag anspricht.

Naja die wahre Spielstärke von Schach Engines hängt weniger von der 
Programmierung als von der Hardware ab. Ein tolles Schach-System zeugt 
weniger von der intellektuellen als von der finanzielle Potenz des 
Entwicklers. Die besseren Entwickler kitzeln auch aus limitierter 
Hardware das selbe wie pedantisch-saubere Programmierer aus ihren 
OOP-Boliden.

Von den Schach- engines finde ich perönlich einzig Deep Blue als 
Referenz für eine Studentenarbeit tauglich, weil es sich hierbei um 
Soft- und Hardwareentwicklung handelt. 
https://de.wikipedia.org/wiki/Deep_Blue.
Also eine "Engine" aka Maschine im wahrsten Wortsinne, nicht nur einen 
Algorithmus ohne Schweiss den als effizioente Implementierung zu 
realisieren.

"Programmieren" kann auch Manfred aus Mannheim - der programmiert jeden 
Tag - seinen Videorecorder.

von Schachmatt (Gast)


Lesenswert?

C. A. Rotwang schrieb:
>> Zur Spielstärke von meiner Engine:
>>
>> Bei meiner Engine peile ich eine Spielstärke von ca. 3000 Elo an. Der
>> beste menschliche Spieler (Magnus Carlsen liegt momentan bei 2826). Das
>> liegt über dem Niveau von diesen alten Schachcomputern, die C. A.
>> Rotwang da in seinem Beitrag anspricht.

Lass dir dazu was sagen: Deine Engine wird eher bei 2500 sein, als bei 
3000. Es sei denn, du steckst viel, viel mehr Zeit hinein, als für eine 
Bachelorarbeit angemessen ist. Ausserdem solltest du selber > 2000 Elo 
spielen, oder mit einem guten Spieler zusammen arbeiten, sonst kapierst 
du gar nicht, warum dein Programm gegen eine 1.99$ HandyApp ständig 
verliert.
Ich spiele bei ca. 2200 Elo, und war schon 1993 bei der MikroWM in 
München dabei, darf also durchaus behaupten, eine gewisse Ahnung zu 
haben.
Nicht umsonst wirft man Stockfish und ein paar anderen Engines vor, 
Plagiate zu sein...

von Pandur S. (jetztnicht)


Lesenswert?

Schachengine - gähn. Das reisst nun niemanden vom Hocker. Dazu bist du 
20 Jahre zu spaet.

Es gibt Millionen spannenderer Aufgabenstellungen wie eine Schach 
Engine.

Eine solche Arbeit sollte neu, spannend, interessant und fuer Zuschauer 
packend sein.

von Rolf R. (dankobum)


Lesenswert?

Schachmatt schrieb:
> Nicht umsonst wirft man Stockfish und ein paar anderen Engines vor,
> Plagiate zu sein...

Dann nenn mal bitte die Fakten, warum Stockfish ein Plagiat sein soll.

von meckerziege (Gast)


Lesenswert?

Troll alarm.....
Elo 3000 schon klar...
Dann auch noch selbst implementiert als Bachelor Arbeit. Wo du 9 Wochen 
oder so Zeit hast?
Konzept erstellen vielleicht... Fertig implementieren niemals.
Und nein. Software Entwicklung ist NICHT, dass man einfach direkt 
losimplementiert.

Es schrieb:
> Jetzt kam bei mir die Frage auf, ob ich das einfach später als meine
> Bachelorarbeit verpacken kann. Ist es möglich, dass man bei der
> Bachelorarbeit einfach sein eigenes Thema auswählt?

Nein. Haha. Jetzt was haben und später als BA verkaufen?
das ist unterschleif und würde zu 5.0 - nicht bestanden führen.
glaub nicht, dass wir Betreuer so blöd sind und das nicht kapieren.

Warum sollte ich überhaupt dieses Thema erlauben? Was hab ich davon 
außer dem Aufwand zur Betreuung?

Sprich doch bitte erst mal mit einem oder deinem Prof bevor du grosse 
luftschlösser baust...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.