1

私は差分進化を使用してコストに基づいて可用性を最適化しようとしています。しかし、ここでは3つの未知のパラメータ(a、b、c)があり、範囲を使って範囲を定義できます。しかし、私は追加の制約をa + b + c < = 10000と定義したいと思います。これを行うためにPythonを使用しています。差分進化の中でオプション "args"を使用しようとしましたが、うまくいきませんでした。どんな情報も高く評価されます。Pythonの微分進化を使用するパラメータの制約

+2

コードサンプルを入力してください。 –

+0

DEF ahs_Ca():範囲内budgため (7000000,100000000,10000000): xaxis.append(budg) F =(0、budg) 境界= [F] *成分 resultEta = differential_evolution(ETA、境界、maxiter = 4000)これは境界を持つサンプルコードです。ここでいくつかの制約を定義する必要があります。この情報が役立つことを願っています。 –

答えて

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

ありがとうございます。最適化問題の複雑さのために、私は別の最適化を使用しなければなりませんでした。 –

関連する問題