2016-03-24 14 views
0

Ich überlege, Matlab Home + Optimization Modul für den Heimgebrauch zu kaufen, aber ich bin mir nicht sicher, dass es tun kann, was ich will.Kann Matlab einen externen Prozess optimieren?

Ich habe einen externen Prozess (nicht Matlab), der Eingabe nimmt, einen Prozess ausführt und Ausgabe erzeugt. Ich möchte die Ein- und Ausgabe an Matlab anbinden, damit Matlab diese Eingaben "optimieren" kann, völlig blind für den diskreten Prozess selbst. Verfügt Matlab über diskrete Optimierungsfunktionen oder sind alle Optimierungsfunktionen auf internen Zugriff auf den Prozess angewiesen?

Danke!

-Stephen

Antwort

3

wenn Ihr externer Prozess fähig ist, Parameter zu assimilieren und Reaktion auf ein externes Programm gibt alle Methoden unter Verwendung von zB Befehlszeilen oder Dateien, ja es möglich ist, nur Ihre Zielfunktion konfigurieren senden und lesen die Parameter und Antwortdaten für den externen Prozess.

Für die diskrete Optimierung funktioniert die Optimierungs-Toolbox nicht mit diskreten Optimierungsproblemen, aber die Dokumentation gibt einen Hinweis darauf, den Parameter innerhalb der Zielfunktion zu runden und dann in der Antwortvariablen erneut auszuführen.

zum Beispiel, kann dies eine Funktion sein, ein Volumen eines Prismas zu optimieren, die in Python geschrieben in einem externen Programm codiert (nur zu Demonstrationszwecken mit einzelnen objetive genetischen Algorithmus (ga)):

function f = optim(x) 
    %Optimization criteria 
    l = round(x(1)); 
    h = round(x(2)); 
    w = round(x(3)); 

    %String to produce the external proccess call as a system command   
    commandStr = ['python -c "print ' num2str(l) ' * ' num2str(h) ' * ' num2str(w) ' "']; 

    %Execute the system command, status = 0 for good execution 
    [status, commandOut] = system(commandStr); 

    %Convert the output of the external program from strin to doble and assign as the response of the optimization funcition 
    f = str2double(commandOut) 

Dann können Sie die optimtool mit dieser funcion als objetive verwenden wie:

enter image description here

Dann ex portiere das Ergebnis in den Arbeitsbereich und round() es.

Oder machen Sie es mit einem Code wie folgt programmierbar:

function [x,fval] = runOptimization(lb,ub) 
    options = gaoptimset; 
    options = gaoptimset(options,'Display', 'off'); 
    [x,fval] =ga(@optim,3,[],[],[],[],lb,ub,[],[],options); 
    x = round(x) 
    fval = optim(x) 

Und laufen als

[x,fval] = runOptimization([1 1 1],[3 4 5]) 

HINWEIS. Die round() Funktion dient nur dazu, zu demonstrieren, wie man eine diskrete Optimierung durchführt, wie in der Dokumentation

vorgeschlagen
Verwandte Themen