1

Ich versuche Differential Evolution zu verwenden, um die Verfügbarkeit basierend auf Kosten zu optimieren. Allerdings habe ich drei unbekannte Parameter (a, b, c) hier und ich kann den Bereich mit Grenzen definieren. Allerdings möchte ich zusätzliche Einschränkung als + b + c < = 10000 definieren. Ich benutze Python, um dies zu tun, und ich habe versucht, eine Option "Args" innerhalb Differential Evolution, aber es hat nicht funktioniert. Jede Information wird geschätzt.Constraints auf Parameter mit Differential Evolution in Python

+2

Können Sie bitte ein Codebeispiel bereitstellen. –

+0

def ahs_Ca(): für BUDG in range (7000000,100000000,10000000): xaxis.append (Haushalt) f = (0, BUDG) Grenzen = [f] * Komponente resultEta differential_evolution = (eta, Schranken , maxiter = 4000) Dies ist der Beispielcode mit Begrenzungen. Ich muss hier einige Einschränkungen definieren. Ich hoffe, diese Information ist hilfreich. –

Antwort

0

Definition der Einschränkung Evolution mit Differential ist keine geeignete Lösung für das Problem, das ich oben beschrieben habe. Zu diesem Zweck können wir den Nminimize-Befehl verwenden, der eine spezielle Option zum Definieren von Beschränkungen aufweist.

scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None) 
2

Hier ist ein Hack. Früher habe ich das letzte Beispiel aus dem documentation und gezwungen, die Summe (x)> 4.1 (ohne diese Einschränkung die optimierte Lösung (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

Vielen Dank für das Teilen. Ich musste aufgrund der Komplexität meines Optimierungsproblems eine andere Optimierung verwenden. –