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