WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Wieviele Möglichkeiten durch mein Problem haben?

 

Konrad
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 15.02.16
Wohnort: Hemmingen Nähe Hanover
Version: ---
     Beitrag Verfasst am: 15.02.2016, 22:35     Titel: Wieviele Möglichkeiten durch mein Problem haben?
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.02.2016, 22:53     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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?

Definitiv zu viele, um alle durchzutesten - aber das macht ga ja nicht.

Zitat:
Es kommt immer folgende Fehlermeldung: D must be an non-negative integer smaller than 2^52

Jetzt fehlt nur noch der Aufruf, der diese Fehlermeldung ergibt.

Zitat:
Ich habe das Pixelfeld in 8 Abschnitte a 2^50 Möglichkeiten geteilt, dann sollte es doch passen, oder?

Immer noch zu viele, um alle durchzutesten - aber das macht ga wie gesagt ohnehin nicht.

Für weitere Unterstützung bitte den verwendeten Code zur Verfügung stellen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Konrad
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 15.02.16
Wohnort: Hemmingen Nähe Hanover
Version: ---
     Beitrag Verfasst am: 16.02.2016, 08:00     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Konrad
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 15.02.16
Wohnort: Hemmingen Nähe Hanover
Version: ---
     Beitrag Verfasst am: 16.02.2016, 08:16     Titel:
  Antworten mit Zitat      
Hi Harald!
Hier kommt mal der Code:
Code:

function flux = Output(x1, x2, x3, x4, x5, x6, x7, x8)

% 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);

a=[];
for i=1:400
     a{length(a)+1,1}=str2double(f_g(i));
end

%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;


Ich nutze die Optimization app.
Als Fehlermeldung kommt:

error running optimization
D must be a non.negative integer smaller than 2^52

Kann ich mir irgendwie anzeigen lassen, worauf sich die Fehlermeldung genau bezieht?
Vielen Dank für die Hilfe!!!
Viele Grüße
Konrad
Private Nachricht senden Benutzer-Profile anzeigen
 
Konrad
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 15.02.16
Wohnort: Hemmingen Nähe Hanover
Version: ---
     Beitrag Verfasst am: 16.02.2016, 09:50     Titel:
  Antworten mit Zitat      
Hi!
Nun hat er mir noch ne ander Fehlermeldung ausgespuckt, die ich nicht zuordnen kann:

The following error occurred converting from cell to double
Error using double
Conversion to double from coll is not possible

Ich verstehe das Problem nicht ganz, da mein Ergebnis kein Cell ist!
Viele Grüße
Konrad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.02.2016, 20:16     Titel:
  Antworten mit Zitat      
Hallo,

setze doch mal einen Haltepunkt in der Zielfunktion.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Konrad
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 15.02.16
Wohnort: Hemmingen Nähe Hanover
Version: ---
     Beitrag Verfasst am: 16.02.2016, 21:21     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.02.2016, 22:29     Titel:
  Antworten mit Zitat      
Hallo,

wenn du MATLAB Haltepunkt setzen googelst, findest du z.B. das.
http://people.inf.ethz.ch/arbenz/MatlabKurs/node66.html

Mit Bezug auf die aktuelle MATLAB-Version in der Dokumentation:
http://www.mathworks.com/help/matla.....process-and-features.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Konrad
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 15.02.16
Wohnort: Hemmingen Nähe Hanover
Version: ---
     Beitrag Verfasst am: 17.02.2016, 21:16     Titel:
  Antworten mit Zitat      
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!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.02.2016, 21:28     Titel:
  Antworten mit Zitat      
Hallo,

poste doch mal bitte die vollständige Fehlermeldung.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Konrad
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 15.02.16
Wohnort: Hemmingen Nähe Hanover
Version: ---
     Beitrag Verfasst am: 17.02.2016, 22:11     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Konrad
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 15.02.16
Wohnort: Hemmingen Nähe Hanover
Version: ---
     Beitrag Verfasst am: 18.02.2016, 15:58     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.02.2016, 17:42     Titel:
  Antworten mit Zitat      
Hallo,

an dem Problem waren wir schon mal. Mit diesen Informationen kann ich dir leider auch nicht weiterhelfen. Ich darf mich zitieren:

Zitat:
setze doch mal einen Haltepunkt in der Zielfunktion.


Zitat:
poste doch mal bitte die vollständige Fehlermeldung.

Falls du in der Optimization App keine ausführlichere Fehlermeldung bekommst, mal die Kommanozeilenfunktionalität ga nutzen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Konrad
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 15.02.16
Wohnort: Hemmingen Nähe Hanover
Version: ---
     Beitrag Verfasst am: 18.02.2016, 20:56     Titel:
  Antworten mit Zitat      
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 1Cool
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,Smile);

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
Code:

function r = Output1(x)

import pdMatlabLib.*
f = pdApp();
f.ConnectToApp();
global flux
flux=0;
y=0;
y(1)=round(x(1));
y(2)=round(x(2));
y(3)=round(x(3));
y(4)=round(x(4));
y(5)=round(x(5));
y(6)=round(x(6));
y(7)=round(x(7));

f1=dec2bin(y(1),7);
f2=dec2bin(y(2),7);
f3=dec2bin(y(3),7);
f4=dec2bin(y(4),7);
f5=dec2bin(y(5),7);
f6=dec2bin(y(6),7);
f7=dec2bin(y(7),7);

fg=[f1 f2 f3 f4 f5 f6 f7];
z=0;
r=0;
b=0;
for i=1:49
    % a{length(a)+1,1}=str2double(fg(i));
    a=[str2double(fg(i))];
b(i)=a+1;
end

disp(b);


for i=1:49
   
    n=b(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

   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)']);
z = f.Exec('flux');
r=1-z;


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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.02.2016, 21:37     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.