차동 진화를 사용하여 비용을 기반으로 가용성을 최적화하려고합니다. 그러나 여기에는 세 개의 알려지지 않은 매개 변수 (a, b, c)가 있으며 경계를 사용하여 범위를 정의 할 수 있습니다. 그러나 추가 제약 조건을 + b + c < = 10000으로 정의하고 싶습니다.이 작업을 수행하기 위해 Python을 사용하고 있으며 차동 진화 내에서 "args"옵션을 사용하려고했지만 작동하지 않았습니다. 모든 정보가 인정 될 것입니다.파이썬에서 차동 진화를 사용하는 매개 변수에 대한 제약
1
A
답변
0
차분 진화를 사용하여 제약 조건을 정의 : I는 documentation에서 마지막 예를 사용하고 (최적의 해결책이 이러한 제약 조건 (0,0)없이) 합 (X)> 4.1 제약 위에서 설명한 문제에 대해서. 이를 위해 제한을 정의하기위한 전용 옵션이있는 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
여기 해킹이 있습니다. 적절한 해결책이 아니다
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
공유해 주셔서 감사합니다. 최적화 문제의 복잡성 때문에 다른 최적화를 사용해야했습니다. –
코드 샘플을 제공해 주실 수 있습니까? –
DEF ahs_Ca() 내지 budg위한 (700000010000000010000000) xaxis.append (budg) F = (0, budg) 경계 = [F] * 성분 resultEta = differential_evolution (ETA, 경계 , maxiter = 4000) 이것은 경계가있는 샘플 코드입니다. 여기서 몇 가지 제약 조건을 정의해야합니다. 희망이 정보는 도움이됩니다. –