Hallo Leute könnte ihr mir bitte bei folgender Aufgabe helfen, bei der schon 2,5 von 6 Punkten erreicht wurden. Es geht hier aber nicht um Syntaxfehler, sondern nur um die Logik. Ich wäre dafür sehr dankbar. Also 2 Teilaufgaben:
Gegeben ein kontuinuierliches Optimierungsproblem mit acht Variablen x0.... x7, wobei für alle x gilt: 0 <= x <100. Wir programmieren nun die Suchoperatoren für einen metaheuristischen Suchalgorithmus(bspw einen Evolutionären Algorithmus), der möglichst gute Lösungskandidaten für dieses Optimierungsproblem finden soll. In Python sieht ein möglicher Lösungskandidat, der eine Belegung aller acht Variablen bestimmt, so aus:
x = [42.0 for _ in Range (8)]
Bei der weiteren Implementierung können Sie auch auf eine Python Funktion prng() zurückgreifen, die eine Zufallszahl prng() Element [0,0; 1,0] liefert.
a) Ein Migrationsoperator erzeugt rein zufällig einen neuen Lösungskandidaten( genannt "new-indivual") aus dem kompletten Suchraum. Implementieren sie einen solchen Operator in Python.
def migrate():
// jetzt kommt meine LSG
n = (prng()*100) (int)
x = [n for _inrange(8)]
new individual = x[0]
//meine LSG ist jetz zuende, ich hatte hier nur 1,5 von 3 pkt
return new _individual:
b) Ein Rekombinationsoperator erzeugt aus zwei Lösungskandidaten parent1, parent2 einen neuene Lösungskandidaten(genannt child) Beim Crossover werden dabei Muster bzew SubSTrukturen aus beiden Elternteilen( parent1 und parent2 ) übernommen. Implementieren Sie einen Rekombinationsoperator mit Crossover in Python.
def recombiine (parent1, parent2):
//ANFANG MEINER LSG
child[]
for x in parent1:
for y in parent2:
if x == y :
child.*append(x)
//ende meiner LSG
return child
Hilfe bei folgender Aufgabe
Wir liefern hier keine fertigen Loesungen. Aber gerne Hilfe zur Selbsthilfe. Doch dazu bitte den Code nochmal posten, mit den Code-Tags aus dem vollstaendigen Editor (</>-Button). Und auch richtigen Code, ich zumindest sehe da diverse Fehler die so nie laufen wuerden.
Aber auch so kann man schon ein paaar Anmerkungen machen:
- in migrate erzeugst du nur EINE Zufallszahl. Statt derer 8. Das musst du aendern.
- in migrate gibst du nur EINE Zahl zurueck, statt eine Liste mit 8 Elementen. Das musst du aendern.
- in recombiine vergleichst jedes Element beider Listen mit jedem der anderen. Was erhoffst du dir davon? Kannst du mal anhand eines einfachen Beispiels selbst darlegen, wie das aussehen koennte fuer zwei konkrete Listen?
Aber auch so kann man schon ein paaar Anmerkungen machen:
- in migrate erzeugst du nur EINE Zufallszahl. Statt derer 8. Das musst du aendern.
- in migrate gibst du nur EINE Zahl zurueck, statt eine Liste mit 8 Elementen. Das musst du aendern.
- in recombiine vergleichst jedes Element beider Listen mit jedem der anderen. Was erhoffst du dir davon? Kannst du mal anhand eines einfachen Beispiels selbst darlegen, wie das aussehen koennte fuer zwei konkrete Listen?
- __blackjack__
- User
- Beiträge: 14045
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@FlavioSimonetti: Du sagst es geht nicht um Syntax – das ist aber nicht richtig. Das was Du da zeigst ist syntaktisch kein Python. Wenn das aber nur irgendeine ausgedachte python-ähnliche Syntax ist, dann wissen wir ja nicht was Du Dir dabei gedacht hast was das bedeuten soll. Wir wissen also nicht wirklich was Du gemacht hast, so kann man auch nicht sagen ob das richtig, oder auf dem richtigen Weg, ist oder ob es falsch ist. Also im Grunde ist es falsch, weil eben kein korrektes Python.
Wie soll denn die Lösung bei `recombine()` geschaffen sein? Wie viele Werte soll die Liste enthalten die das Kind der beiden Eltern darstellt? Und wie sollen die zustande kommen?
Wo kommt die `prng()`-Funktion her? Der Beschreibung nach ist das die `random()`-Funktion aus dem gleichnamigen Modul‽ Falls sie das ist, warum wird sie dann in das kryptische `prng()` umbenannt?
Wie soll denn die Lösung bei `recombine()` geschaffen sein? Wie viele Werte soll die Liste enthalten die das Kind der beiden Eltern darstellt? Und wie sollen die zustande kommen?
Wo kommt die `prng()`-Funktion her? Der Beschreibung nach ist das die `random()`-Funktion aus dem gleichnamigen Modul‽ Falls sie das ist, warum wird sie dann in das kryptische `prng()` umbenannt?
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
@FlavioSimonetti: Die Funktion 'migrate()' würde nur 'n' zurück geben, wenn sie denn laufen täte. Und wenn 'recombine()' laufen täte, würde es die Teilmenge der beiden Sequenzen zurück geben. Falls jedes Element nur einmal vorkommen darf, lässt sich dies mit Sets einfacher lösen.
Falls Du überprüfen möchtest, ob die Logik stimmt, wirst Du den Code laufen lassen müssen. D.h. Du wirst auch an der Syntax nicht vorbeikommen.
Und falls euch der Beispielcode
tatsächlich so in der Aufgabenstellung geliefert wurde, überkommen mich Zweifel an der Lehre. Oder soll das alles nur Pseudocode sein?
Falls Du überprüfen möchtest, ob die Logik stimmt, wirst Du den Code laufen lassen müssen. D.h. Du wirst auch an der Syntax nicht vorbeikommen.
Und falls euch der Beispielcode
Code: Alles auswählen
x = [42.0 for _ in Range (8)]
@FlavioSimonetti:
Was ich leider aus deinem Post nicht rauslesen kann. Ist dir bewusst, wo du die Punkte verloren bzw. warum du nicht die volle Punktzahl bekommen hast? Ist dir klar was gefordert ist und hast Probleme das umzusetzen oder hast du das Gefühl die Aufgabe erfüllt zu haben?
Was ich leider aus deinem Post nicht rauslesen kann. Ist dir bewusst, wo du die Punkte verloren bzw. warum du nicht die volle Punktzahl bekommen hast? Ist dir klar was gefordert ist und hast Probleme das umzusetzen oder hast du das Gefühl die Aufgabe erfüllt zu haben?
-
- User
- Beiträge: 4
- Registriert: Mittwoch 24. Juli 2019, 08:37
Ok Leute danke schomal, ich ändere den beitrag ein wenig ab