Avez-vous déjà voulu optimiser une fonction créée dans Matlab avec le logiciel d'optimisation (Optune cette fois) en python pour la faire sentir bien? J'ai pensé que je pouvais faire quelque chose, alors j'ai essayé.
Matlab R2018a Win10 python 3.6 (Anaconda)
Il est supposé que python contient environ 3,5 ou 3,6 (R2020 peut être OK avec un peu plus de ver?) J'ai mis 3,6 dans pyenv.
--Autoriser le chargement de matlabengine
http://yusuke-ujitoko.hatenablog.com/entry/2019/08/06/212756
Reportez-vous ici, ouvrez l'invite Anaconda avec "privilèges d'administrateur" et tapez la commande suivante
Pour le moment, anaconda3 \ "envs \ py36" est destiné à ceux qui n'ont pas installé anaconda dans l'environnement virtualenv.
Est-ce inutile?
cd C:\Program Files\MATLAB\R2018a\extern\engines\python
python setup.py install --prefix="C:\Users\****\anaconda3\envs\py36"
**** est le nom d'utilisateur. Maintenant, python et matlab sont liés.
Tout d'abord, la fonction matlab à exécuter est la suivante. Placez-le dans le même dossier que le code python suivant.
function y = func(x)
y = (x-3)^2;
Après cela, démarrez Spyder et exécutez la commande suivante sur spyder
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)
#Maintenant, lisez la fonction Matlab et renvoyez le score pour x
score = eng.func(x)
return score
#Fonction principale d'ici
eng = matlab.engine.start_matlab()
study = optuna.create_study()
study.optimize(objective, n_trials=1000)
La fonction Matlab func est appelée sur python comme indiqué ci-dessous, et le résultat est optimisé par Optune. (Dans ce cas, la valeur minimale de 3 peut être prédite avec 1000 essais). Cette fois, c'est une fonction simple, vous n'avez donc pas à la rechercher, mais ce serait plus facile si vous pouviez optimiser les fonctions complexes que vous avez créées dans le passé. Quant à la variable, "x = trial.suggest_uniform ('x', -10, 10)" de python est simplement augmenté à x1, x2 ... Même ceux qui sont bons en Matlab et pas bons en python peuvent optimiser diverses choses.
réduction
[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}
Il n'y avait pas d'espace pour coller la licence de sushi. Optuna est incroyable. Mais je suis sûr que Matlab a aussi une fonction (boîte à outils) qui peut le faire ... S'il vous plaît, faites-moi savoir.