scipyのbasinhoppingを使って多変数関数の最小値となるパラメータ求めようとしています。
具体的にはfunc(x)の変数をリストx[]として,各xに対して
-π/2<=x[n-2]<=...<=x[1]<=x[0]<=π/2
という条件を満たし,func(x)を最小にするx[]を求めます。
n=4の場合は以下のように,この条件式を力技で書きました(cons内の下2行)。
Python3
1import numpy as np 2import scipy.optimize as opt 3n = 4 4x0 = [0,0,0] 5def func(x): 6 #ここに数式 7 return ans 8#条件式 9cons = ({'type':'ineq','fun': lambda x: x+np.pi/2 }, 10 {'type':'ineq','fun': lambda x: np.pi/2-x }, 11 {'type':'ineq','fun': lambda x: x[0]-x[1]},#ここと 12 {'type':'ineq','fun': lambda x: x[1]-x[2]})#ここを1行にまとめたい 13 14minimizer_kwargs = {"method":"COBYLA","constraints":cons} 15x = opt.basinhopping(func, x0,minimizer_kwargs=minimizer_kwargs) 16print(x)
しかしnを増やしていくと,この条件式の行数が増えていってしまうため,x[k]-x[k+1]>=0のような形で1行でまとめてしまいcons内を3行に収まるようにしたいと考えています。
ご教示頂けませんでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。