Rufen Sie Matlab von Python zur Optimierung auf

Einführung

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.

Betriebsumgebung

Matlab R2018a Win10 python 3.6 (Anaconda)

Vorbereitungen

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.

Ausführungscode

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)

Ausführungsergebnis

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}

abschließend

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

Rufen Sie Matlab von Python zur Optimierung auf
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Rufen Sie die Python-Bibliothek zur Textnormalisierung in MATLAB auf
Eine einfache Möglichkeit, Java von Python aus aufzurufen
Rufen Sie CPLEX von Python aus auf (DO cplex)
Post von Python nach Slack
Flirte von PHP nach Python
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
Stellen Sie von Python aus eine Verbindung zu SQLite her
Ich wollte die Python-Bibliothek von MATLAB verwenden
[Python] So rufen Sie eine Funktion von c aus Python auf (ctypes edition)
Rufen Sie C-Sprachfunktionen von Python auf, um mehrdimensionale Arrays auszutauschen
Rufen Sie C von Python mit DragonFFI auf
Post von Python auf Facebook Timeline
[Lambda] [Python] Von Lambda auf Twitter posten!
Rufen Sie popcount von Ruby / Python / C # auf
Stellen Sie von Python aus eine Verbindung zur utf8mb4-Datenbank her
Python (vom ersten Mal bis zur Ausführung)
Poste ein Bild von Python auf Tumblr
Rufen Sie Python von Nim mit Nimpy auf
So greifen Sie über Python auf Wikipedia zu
Python, um von einer anderen Sprache zu wechseln
Gehen Sie zur Sprache, um Teil 8 zu sehen und sich daran zu erinnern. Rufen Sie die GO-Sprache von Python aus auf
Rufen Sie C / C ++ von Python auf dem Mac auf
Wie man Python oder Julia von Ruby aus aufruft (experimentelle Implementierung)
Rufen Sie die c-Sprache von Python aus auf (python.h)
Hat sich nicht von Python 2 auf 3 geändert
Aktualisieren Sie Mac Python von 2 auf 3
Rufen Sie dlm von Python aus auf, um ein zeitvariables Koeffizientenregressionsmodell auszuführen
[Python] Fluidsimulation: Von linear zu nichtlinear
Von Python bis zur Verwendung von MeCab (und CaboCha)
So aktualisieren Sie Google Sheets von Python
Privates Python-Handbuch (von Zeit zu Zeit aktualisiert)
Ich möchte ein Glas aus Python verwenden
Konvertieren Sie von Katakana zu Vokal Kana [Python]
Push-Benachrichtigung vom Python-Server an Android
Herstellen einer Verbindung von Python zu MySQL unter CentOS 6.4
Portieren und Ändern des Doublet-Solvers von Python2 auf Python3.
Zugriff auf RDS von Lambda (Python)
Python> Ausgaben von 1 bis 100, 501 bis 600> Für CSV
In Python von Markdown in HTML konvertieren
Aufrufbefehle von Python (Windows Edition)
[Amazon Linux] Wechsel von der Python 2-Serie zur Python 3-Serie
API-Erklärung zum Berühren von Mastodon aus Python
Stellen Sie von Python aus eine Verbindung zur Websocket-API von coincheck her
Auf Python 2.7.9 aktualisiert
C-Sprache zum Anzeigen und Erinnern Teil 2 Rufen Sie die C-Sprache aus der Python-Zeichenfolge (Argument) auf
Summe von 1 bis 10
SQL zu SQL
C-Sprache zum Sehen und Erinnern Teil 1 Rufen Sie die C-Sprache aus Python auf (Hallo Welt)
MeCab von Python
C-Sprache zum Anzeigen und Erinnern Teil 4 Rufen Sie die C-Sprache von Python (Argument) double auf
"Backport" zu Python 2
C-Sprache zum Anzeigen und Erinnern Teil 5 Rufen Sie die C-Sprache aus dem Python-Array (Argument) auf
Senden Sie eine Nachricht von Slack an einen Python-Server