Zum Inhalt springen

Umsetzungsproblem


Empfohlene Beiträge

Geschrieben

Servus,

Ich habe gerade ein kleines Verständnissproblem für die Umsetzung von meinen geplanten Programm.

Also ich habe einen Ausgangszustand A von dieser hat 12 Zugmöglichkeiten, jeder dieser Züge hat 11 Zug Möglichkeiten und jeder dieser Züge hat ebenfalls 11 Zug Möglichkeiten, maximal gibt es 20 Züge.

Die Zugmöglichkeiten lauten zug(int(1-6), Boolean(true/false)).

Außerdem soll die Möglichkeit bestehen, einen Zug rückgängig zu machen und von dort dann einen anderen Zug zu machen), dafür müssen alle 20 Züge gespeichert werden...

Ich werde auch noch weitere Einschränkungen finden, aber erstmal stellt sich mir die Frage, wie setze ich das überhaupt um?

Mein bisheriger Ansatz und die Frage, wie bekomme ich das effektiver hin:

             int zugzaehler=0;

		Boolean solved=false;

		Boolean clockwise=true;

		while(solved==false){

			int seite=1;

		           clockwise=true;

			while(zugzaehler<20)

			{

				while(seite<=6){

                                                    zug(seite,clockwise);

                                                    solved=is_solved();

				        if(solved==true)

				       {

					break;

                                                    }

                                                    seite=+1;

                                                    zugzaehler=+1;

                                             }

                                             clockwise=false;

                                   }

                      }




Gast runtimeterror
Geschrieben

Irgendwie habe ich bei deinen Posts immer das Gefühl, dass du gerne in Rätseln sprichst. Ich habe den Beitrag mehrfach lesen müssen um zu erahnen, was du vorhast.

Ich rate einfach mal, dass du dich an einer Brute-Force-Lösung für den Rubiks Zauberwürfel versuchst.

Denke daran, dass du so 12×11^19 Kombinationen durchprobierst. Ohne es nachgerechnet du haben ist das eine Zahl mit der du nicht glücklich wirst.

Dein Algorithmus erlaubt nicht die Drehung einer Seite um 180°; ist das Absicht?

Die Zeile "seite=+1" wird nicht das tun, was du dir erhoffst ;)

Der generelle Ansatz für deinen Algorithmus ist das Backtracking-Verfahren, welches am Einfachsten als Rekursion implementiert wird.

Die oben erwähnte Variante mit dem Array würde ich als Optimierung implementieren, sobald der Rest funktioniert.

Ich hoffe, das hilft dir weiter.

Geschrieben (bearbeitet)

Dankeschön, ja das hilft schon mal weiter. Zumindest weiß ich jetzt worum es geht. Denn unser Lehrer hat uns nur die einzelnen Drehmethoden genannt und das Ziel wie es aussehen soll, ohne dabei den Zauberwürfel zu erwähnen, anscheinend sollten wir nicht einfach fertige Algorithmen übernehmen.

Wisst ihr wie man die Mathematik der Linearenoptimierung auf dieses Problem projiziert. Die Lineare Optimierung soll das Ziel sein. Die Mathematik dahinter glaube ich zu verstehen, aber ich weiß nicht wie ich die lineare Optimierung darauf anwende.

Bearbeitet von uthred
Geschrieben

Wisst ihr wie man die Mathematik der Linearenoptimierung auf dieses Problem projiziert. Die Lineare Optimierung soll das Ziel sein. Die Mathematik dahinter glaube ich zu verstehen, aber ich weiß nicht wie ich die lineare Optimierung darauf anwende.

Simplex-Verfahren wäre mit das bekannteste Verfahren aus der linearen Optimierung, aber das wird Dir hier nicht helfen, weil Du hier kein Optimierungsproblem hast. Die Lösungsstrategie lässt sich als gruppentheoretischer Algoritmus beschreiben, wobei ich dazu auch Java für eine völlig falsche Sprache, solche Probleme löst man GAP (Software)

Geschrieben

Naja, ein 3 Dimensionales Koordinatensystem kann den Würfel mit x Ebenen darstellen und die Lösung für jeden Würfel(3x3x3) ist <20

Jede einzelne Bewegung ist vorgegeben, ich sehe da rein von der Logik her schon das Optimierungsproblem.

Geschrieben

Ich will den kürzesten Weg finden einen Zauberwürfel zu lösen, also den "optimalen Weg", dafür muss ich den kompletten Algorithmus auf eine eindimensionale Array aufbauen (54 Werte). Ich weiß (bzw es wurde vorgegeben das dieser Würfel in 20 Zügen zu lösen sei. Die Bewegungsmethoden (12 Stück Für jede Seite 2 (clockwise, counterclockwise) sind vorgegeben.

Ich muss diesen Code auch erklären können.

Ein Zug ist definiert durch die Bewegung einer Seite (egal ob 1x(clockwise), 2x, 3x(counter-clockwise))

Geschrieben
Ich will den kürzesten Weg finden einen Zauberwürfel zu lösen, also den "optimalen Weg", dafür muss ich den kompletten Algorithmus auf eine eindimensionale Array aufbauen (54 Werte).

Dieses Problem ist aber nicht linear. Du willst aus eine Menge an Lösungen die Lösung mit einer bestimmten Bedingung finden und das ist so erst mal NP-vollständig, denn ohne Randbedingungen musst Du Dir jede Lösung anschauen und prüfen, ob sie eben "optimal" ist.

Ich weiß (bzw es wurde vorgegeben das dieser Würfel in 20 Zügen zu lösen sei. Die Bewegungsmethoden (12 Stück Für jede Seite 2 (clockwise, counterclockwise) sind vorgegeben.

Zauberwürfel

Gottes Algorithmus

Der Algorithmus setzt letztendlich die algebraische Gruppe entsprechend um, d.h. Du solltest damit beginnen, zu verstehen, was Gruppen und Graphen in der Algebra sind, denn das benötigst Du, um daraus passenden Code zu schreiben

Geschrieben

Nach Bruteforce-methode ca.4 Billionen Züge, ein Jahrelang entwickelten Algorithmus innerhalb von vier Wochen verstehen und Umsetzen, mathematische Methoden die man sonst eher bei Studenten sieht(die ganzen Speedcuber wurden meist von Studenten entwickelt) und zuletzt Programmiertechniche Methoden, die ich erst lernen muss (Ausbildung).

Ich glaube schon das ich die Komplexität begriffen habe, aber Aufgeben kommt nicht in Frage und verzweifeln hilft auch nicht.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...