1

我正在嘗試使用差分進化來根據成本優化可用性。但是,我在這裏有三個未知參數(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

謝謝你分享這個。由於我的優化問題的複雜性,我必須使用不同的優化。 –