单目标,混合整数,约束规划的优化算法?

时间:2015-03-10 10:13:37

标签: mathematical-optimization genetic-algorithm nonlinear-optimization

我有一个优化问题很难通过解析器或数值求解器解决,因为我无法为它提供衍生物。因此,我正在寻找使用启发式或遗传算法的解决方案。

我的问题包括以下内容:

  • 单一目标
  • 大规模,但app。少于10.000个变量
  • 混合整数(MIP)(变量主要是小数,一些是布尔/整数变量)
  • 约束(变量边界约束,相等和不等式约束,app。与变量相同)

所以我的问题是:

  1. 是否有一篇论文在启发式/遗传算法中考虑了所有要点(特别是混合整数规划)?

  2. 是否有一种在启发式/遗传算法中实现混合整数规划的好方法?

  3. 如何以最佳方式处理启发式/遗传算法中的等式约束?

  4. 是否有任何(开源)库可能有希望?


  5. 到目前为止,我的问题是在MOEA-Framework使用algorithmtypes NSGAII (以及它的一些衍生物)或一个简单的愚蠢随机数生成器实现的问题是,当使用等式约束时或者是一个MIP问题,GA没有找到解决方案,即使不是在允许很多代数时也没有找到解决方案,而且在一个非常小的问题上存在大量的群体。

1 个答案:

答案 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])