質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1313閲覧

リストを用いた制約条件を1行で書きたい。

KEILA

総合スコア15

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/09/21 06:45

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行に収まるようにしたいと考えています。
ご教示頂けませんでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

リスト内包表記を用いて

Python3

1{'type':'ineq','fun': lambda x: [x[k]-x[k+1] for k in range(n-2)]}

で1行にまとめられました。
お騒がせいたしました。

投稿2021/09/21 06:53

KEILA

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問