Wollten Sie schon immer eine in Matlab erstellte Funktion mit der Optimierungssoftware (diesmal Optune) in Python optimieren, damit sie sich gut anfühlt? Ich dachte, ich könnte etwas tun, also habe ich es versucht.
Matlab R2018a Win10 python 3.6 (Anaconda)
Es wird vorausgesetzt, dass Python etwa 3,5 oder 3,6 enthält (R2020 kann mit etwas mehr ver in Ordnung sein?) Ich habe 3.6 in pyenv gesetzt.
--Lassen Sie das Laden der Matlabengine
http://yusuke-ujitoko.hatenablog.com/entry/2019/08/06/212756
Öffnen Sie hier die Anaconda-Eingabeaufforderung mit "Administratorrechten" und geben Sie den folgenden Befehl ein
Derzeit ist anaconda3 \ "envs \ py36" für diejenigen gedacht, auf denen anaconda nicht in der virtualenv-Umgebung installiert ist.
Ist es unnötig
cd C:\Program Files\MATLAB\R2018a\extern\engines\python
python setup.py install --prefix="C:\Users\****\anaconda3\envs\py36"
**** ist der Benutzername. Jetzt sind Python und Matlab miteinander verbunden.
Zunächst ist die auszuführende Matlab-Funktion wie folgt. Legen Sie dies in denselben Ordner wie den folgenden Python-Code.
function y = func(x)
y = (x-3)^2;
Starten Sie danach Spyder und führen Sie den folgenden Befehl auf spyder aus
import sys
sys.path.append("C:\\Users\\****\\anaconda3\\envs\\py36lib\\site-packages")
import matlab.engine
import optuna
def objective(trial):
x = trial.suggest_uniform('x', -10, 10)
#Lesen Sie nun die Matlab-Funktion und geben Sie die Punktzahl für x zurück
score = eng.func(x)
return score
#Hauptfunktion von hier
eng = matlab.engine.start_matlab()
study = optuna.create_study()
study.optimize(objective, n_trials=1000)
Die Matlab-Funktion func wird wie unten gezeigt in Python aufgerufen und das Ergebnis von Optune optimiert. (In diesem Fall kann der Mindestwert von 3 mit 1000 Versuchen vorhergesagt werden.) Diesmal ist es eine einfache Funktion, sodass Sie nicht danach suchen müssen. Es wäre jedoch einfacher, wenn Sie die komplexen Funktionen optimieren könnten, die Sie in der Vergangenheit erstellt haben. Für die Variable wird Pythons "x = trial.suggest_uniform ('x', -10, 10)" einfach auf x1, x2 ... erhöht. Selbst diejenigen, die gut in Matlab und nicht gut in Python sind, können verschiedene Dinge optimieren.
Kürzung
[I 2020-09-21 20:52:03,537] Trial 997 finished with value: 0.611554463759686 and parameters: {'x': 2.217980522135359}. Best is trial 551 with value: 3.107692752820123e-07.
[I 2020-09-21 20:52:03,549] Trial 998 finished with value: 1.5139869920248414 and parameters: {'x': 4.230441787336907}. Best is trial 551 with value: 3.107692752820123e-07.
[I 2020-09-21 20:52:03,560] Trial 999 finished with value: 0.5050438774658341 and parameters: {'x': 3.7106643915842654}. Best is trial 551 with value: 3.107692752820123e-07.
study.best_value
Out[14]: 3.107692752820123e-07
study.best_params
Out[15]: {'x': 2.9994425331621684}
Es war kein Platz zum Einfügen der Sushi-Lizenz. Optuna ist unglaublich. Aber ich bin sicher, Matlab hat auch eine Funktion (Toolbox), die dies kann ... Lass es mich wissen, bitte.
Recommended Posts