Verfasst am: 15.02.2016, 21:35
Titel: Wieviele Möglichkeiten durch mein Problem haben?
Hallo Zusammen!
Mein Name ist Konrad und ich beschäfftige mich noch nicht so sehr lange mit Matlab!
Ich benutze Matlab zur Steuerung eines Simulationsprogrammes für die Optik und würde gern mein Optisches Element optimieren! Das besteht aus 20 x 20 Pixeln zu je zwei Werten, macht 2^400 Möglichkeiten?
Ist das zu viel für den genetischen Algorithmus? Es kommt immer folgende Fehlermeldung: D must be an non-negative integer smaller than 2^52
Ich habe das Pixelfeld in 8 Abschnitte a 2^50 Möglichkeiten geteilt, dann sollte es doch passen, oder?
Ich danke euch schon mal im Voraus!
Viele Grüße
Konrad
Hallo Harald!
Danke schon mal für deine Antwort!
Ich werde den Code gleich ins Forum Stellen!
Ja, es sind natürlich viel zu viele Möglichkeiten, doch ich dachte auch, dass ga nicht alle durchprobiert!
So, ich werde den Code gleich mal ordentlich vorbereiten, dass er auch zu verstehen ist!
Viele Grüße
Konrad
% Aufruf von OmniSim, dem Optiksimulationsprogramm
import pdMatlabLib.*
f = pdApp();
f.ConnectToApp();
flux=0;
%Code um die Pixel zu wechseln, die Variablen werden im ga generiert und
%dann in binäre Zahlen umgewandelt
f1=dec2bin(x1,50);
f2=dec2bin(x2,50);
f3=dec2bin(x3,50);
f4=dec2bin(x4,50);
f5=dec2bin(x5,50);
f6=dec2bin(x6,50);
f7=dec2bin(x7,50);
f8=dec2bin(x8,50);
f_g=cat(8,f1,f2,f3,f4,f5,f6,f7,f8);
%Hier sind die Befehle für das Simulationsprogramm, um die Pixel zu
%tauschen
for i=1:400
n=a{i};
e=5+i;
f.Exec(['app.subnodes[1].subnodes[1].fsdevice.objects[' num2str(e) '].startchange()']);
f.Exec(['app.subnodes[1].subnodes[1].fsdevice.objects[' num2str(e) '].setobjectlayerindex(' num2str(n) ')']);
f.Exec(['app.subnodes[1].subnodes[1].fsdevice.objects[' num2str(e) '].finishchange()']);
end % Simulationsprogramm startet Berechnung und gibt ein Scalar zurück, das % optimiert werden soll
f.Exec('app.subnodes[1].subnodes[1].fsdevice.fdtd.calculate()');
f.Exec('app.subnodes[1].subnodes[1].fsdevice.fdtd.clear()');
f.Exec(['Set flux=app.subnodes[1].subnodes[1].fsdevice.fdtd.getpolarisedflux(0.851000,5,2,4,2,0)']);
h = f.Exec('flux');
flux=1-h;
Hi Harald!
Danke für deine Antwort, doch ich verstehe nicht, was du mit "Haltepunkt in der Zielfunktion" meinst?
Tut mir leid, wenn ich fragen muzss, aber ich habe nicht zu viel Ahnung von Matlab!
Viele Grüße
Konrad
Hallo Harald!
Ich hatte nur falsch gesucht, dann hätte ich das mit dem Haltepunkt auch gefunden!
Danke für deine Links!
Die Fehlermeldung: The following error occurred converting from cell to double
Error using double
Conversion to double from coll is not possible
kommt immer noch, obwohl ich schon quasi alles rausgenommen habe, was probleme machen könnte, ich versteh es nicht ganz!
Evtl. hast du ne Idee!
Viele Grüße
Konrad
P.s.: Mein Simulationsprogramm liefert ein Scalar, dass habe ich mehrmal geprüft!
Hallo Harald!
Ich habe den Fehler gefunden, es ist das aufrufen des Optikprogramms, das macht Probleme!
Mal sehen, wie ich das lösen kann!
Viele Grüße
Konrad
Hallo Harald!
der ga einen neuen Fehler aus. Der algorithmus läuft etwas und dann kommt:
Error running optimization.
The following error occurred converting from cell to double:
Error using double
Conversion to double from cell is not possible.
Dabei habe ich ger keine cells!
Kannst du mir erklären, woran das liegt?
Vielen dank im Voraus!
Viele Grüße
Konrad
Hallo Harald!
Mit dem Haltepunkt habe ich keine Fehler erkennen können!
Hier kommt mal die komplette Fehlermeldung:
Error using dec2bin (line 32)
D must be a non-negative integer smaller than 2^52.
Error in Output1 (line 1
f2=dec2bin(y(2),7);
Error in createAnonymousFcn>@(x)fcn(x,FcnArgs{:}) (line 11)
fcn_handle = @(x) fcn(x,FcnArgs{:});
Error in makeState (line 47)
firstMemberScore = FitnessFcn(state.Population(initScoreProvided+1,);
Error in gaunc (line 40)
state = makeState(GenomeLength,FitnessFcn,Iterate,output.problemtype,options);
Error in ga (line 356)
[x,fval,exitFlag,output,population,scores] = gaunc(FitnessFcn,nvars, ...
Caused by:
Failure in initial user-supplied fitness function evaluation. GA cannot continue.
Ich habe es mit [h fval] = ga(@Output1, ) gestartet
Hier kommt auch noch mal mein Program
Es ist bestimmt nicht schön geschrieben, doch es funktioniert, auch aus der App kann ich es starten, doch dann bricht der Algorithmus ab, weshalb auch immer!
Viele Grüße
Konrad
Ich habe es mit [h fval] = ga(@Output1, ) gestartet
Es würde mich sehr verwundern, wenn du bei dem Befehl nicht sofort eine Fehlermeldung wegen Syntaxfehler bekommst.
Deine Fehlermeldung sagt doch sehr klar, dass das Problem in dec2bin auftritt.
Eine Möglichkeit kann sein, Schranken für x vorzugeben.
Im übrigen ist es recht sinnfrei, x-Werte entgegenzunehmen und dann intern zu runden. Wenn einzelne oder alle Komponenten von x nur ganzzahlig sein dürfen, dann sollte das über das Argument IntCon sichergestellt werden.
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.