我有一个优化问题很难通过解析器或数值求解器解决,因为我无法为它提供衍生物。因此,我正在寻找使用启发式或遗传算法的解决方案。
我的问题包括以下内容:
所以我的问题是:
是否有一篇论文在启发式/遗传算法中考虑了所有要点(特别是混合整数规划)?
是否有一种在启发式/遗传算法中实现混合整数规划的好方法?
如何以最佳方式处理启发式/遗传算法中的等式约束?
是否有任何(开源)库可能有希望?
到目前为止,我的问题是在MOEA-Framework使用algorithmtypes NSGAII (以及它的一些衍生物)或一个简单的愚蠢随机数生成器实现的问题是,当使用等式约束时或者是一个MIP问题,GA没有找到解决方案,即使不是在允许很多代数时也没有找到解决方案,而且在一个非常小的问题上存在大量的群体。
答案 0 :(得分:0)
您是否尝试过sciPy / numPy?它有一个执行模拟退火的命令。您必须做的唯一事情是将约束转换为差异并将它们与目标函数相加。 看看这个:
Min Z = x1 ^ 2 + x2 ^ 2
受制于:
X1 + X2> = 2
这是我的python代码:
#import modules
import numpy as np
from scipy import optimize
#define Constraint 1
def diffC1(x1,x2):
return max(x1+x2-2,0)
#penalization value
M=10000.
#define your objective function (with Constraint 1 inserted)
def f(X):
x1,x2=X
print x1,x2
return x1**2+x2**2+M*(diffC1(x1,x2))
#initialize x1=2 and x2=2
X0=np.array([2., 2.])
#try your function
f(X0)
#solve!
np.random.seed(555) # Seeded to allow replication.
res = optimize.anneal(f, X0, schedule="boltzmann",
full_output=True, maxiter=10000,
dwell=250, disp=True)
#evaluate your achieved objective function value
f(res[0])