私は差分進化を使用してコストに基づいて可用性を最適化しようとしています。しかし、ここでは3つの未知のパラメータ(a、b、c)があり、範囲を使って範囲を定義できます。しかし、私は追加の制約をa + b + c < = 10000と定義したいと思います。これを行うためにPythonを使用しています。差分進化の中でオプション "args"を使用しようとしましたが、うまくいきませんでした。どんな情報も高く評価されます。Pythonの微分進化を使用するパラメータの制約
1
A
答えて
0
差動進化を使用して制約を定義するには、適切な解決策ではありません私が上で述べた問題のために。この目的のために、制約を定義する専用のオプションを持つNminimizeコマンドを使用できます。
scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)
2
ここはハックです。私はdocumentationから最後の例を使用し、和を拘束(X)> 4.1(この制約なし最適化された溶液である(0,0)):
from scipy.optimize import differential_evolution
import numpy as np
def ackley(x):
arg1 = -0.2 * np.sqrt(0.5 * (x[0] ** 2 + x[1] ** 2))
arg2 = 0.5 * (np.cos(2. * np.pi * x[0]) + np.cos(2. * np.pi * x[1]))
if x[0]+x[1] > 4.1: #this is the constraint, where you would say a+b+c <=1000
return -20. * np.exp(arg1) - np.exp(arg2) + 20. + np.e
else:
return 1000 #some high value
bounds = [(-5, 5), (-5, 5)]
result = differential_evolution(ackley, bounds)
result.x, result.fun
+0
ありがとうございます。最適化問題の複雑さのために、私は別の最適化を使用しなければなりませんでした。 –
関連する問題
- 1. 微分進化アルゴリズムを使用して最良のパラメータを選択する方法
- 2. パラメータの制約
- 3. Python離散微分
- 4. Matlabの最適化:パラメータの制約を定義する方法
- 5. scipyを使用して1つのパラメータの制約で最小化
- 6. 制約を使用した最適化
- 7. なぜ、クロスオーバーは微分進化において有益なのですか?
- 8. Android - 制約レイアウトのパラメータをアニメーション化する方法
- 9. Pythonの偏微分、数値では使用できません
- 10. Sympy - パラメータ制約のある制限
- 11. 16進コードを使用して制約を見つけよう
- 12. 間隔で変化するパラメータを持つ微分方程式を解く
- 13. api.aiのパラメータ値の制約
- 14. 進化するpythonのロードマップ
- 15. パルプを使用した最適化の制約を与える
- 16. Pythonでの文字の微分とループ
- 17. Reporting Servicesパラメータの制約
- 18. C#Generics - 型パラメータの制約
- 19. Symfony 2の引数/パラメータを使用したカスタムバリデータ/制約
- 20. Pythonの三次微分方程式
- 21. Pythonの二次微分 - scipy/numpy/pandas
- 22. F#パラメータの制約のある機能
- 23. 和の微分
- 24. タイプセーフティ用の汎用パラメータとしてSystem.Typeを制約します
- 25. オプティカルフローの空間微分を計算するためのPythonライブラリ
- 26. Pythonパルプ制約
- 27. Marklogic分配制約
- 28. 非負の解を与えるように制約された遅延微分方程式(DDE)システムを解く
- 29. ウェイト制約下での平均分散最適化
- 30. in_set/2制約を使用する
コードサンプルを入力してください。 –
DEF ahs_Ca():範囲内budgため (7000000,100000000,10000000): xaxis.append(budg) F =(0、budg) 境界= [F] *成分 resultEta = differential_evolution(ETA、境界、maxiter = 4000)これは境界を持つサンプルコードです。ここでいくつかの制約を定義する必要があります。この情報が役立つことを願っています。 –