【问题标题】:Pymoo Optimization problem for binary variables and constraints二进制变量和约束的 Pymoo 优化问题
【发布时间】:2021-03-11 08:10:12
【问题描述】:

我对这个不错的优化包 pymoo 很陌生。在浏览了文档之后,我仍然无法针对我的具体问题实施这个包。以下是目标函数和约束:

目标:

       1) min(f1); 2) min(f2)

约束

      1)x =0 or 1; 2) sum(x)=9

这是我当前的代码:

class MyProblem(Problem):

  def __init__(self):
      super().__init__(n_var=13,
                     n_obj=2,
                     n_constr=1,
                     xl=0,
                     xu=1)
  def first_objective_function(self, x):
      y = ''my main function''
      return y
    
  def second_objective_function(self, x):
          y = ''my second main function''
          return y

  def _evaluate(self, X, out, *args, **kwargs):
          f1 = self.first_objective_function(X)
          f2 = self.second_objective_function(X)
          g = ???????
          out["F"] = np.column_stack([f1, f2])
          out["G"] = np.column_stack([g])

my_problem = MyProblem()

algorithm = NSGA2(
           pop_size=40,
           n_offsprings=10,
           sampling=get_sampling("bin_random"),
           crossover=get_crossover("bin_hux", prob=0.9, eta=15),
           mutation=get_mutation("bin_bitflip", eta=20),
           eliminate_duplicates=True)

res = minimize(my_problem,
           algorithm,
           ('n_gen', 100),
           verbose=False)

我的问题是如何定义我的约束方程。 sum(X) 等于一个值,不小于一个值。

第二个问题是,我是否为这个问题使用了正确的采样、交叉和变异算法?我希望 x 中 1 的数量是固定的。

【问题讨论】:

    标签: python-3.x optimization genetic-algorithm


    【解决方案1】:

    一般来说,尝试解决子集选择问题。这可以通过定制遗传算法来完成。 我已经为Subset Selection 编写了一个示例。 所有进化算子都考虑了数组中 1 的最大数量。这意味着永远不会违反约束。通常,您还可以定义一个 Repair 运算符,将所有违反阈值的运算符归零。

    但是,代码可能需要针对您的特定问题进行更多自定义,但您可以随意将其用作蓝图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      相关资源
      最近更新 更多