【问题标题】:Find initial feasible solution for all agents为所有代理找到初始可行的解决方案
【发布时间】:2021-05-07 07:15:02
【问题描述】:

编辑以获得更好的解释(对不起)。

我有一个半去中心化的优化问题。半去中心化的意思是:我有一个聚合器来控制每个代理的最佳响应,但是这些代理有一个单独的成本函数(变量和约束都被复制)。理论上,我只需要找到一个初始可行点(对于所有代理),然后通过迭代解决每个代理的优化问题,它会收敛到一个最优值。

我的问题是,为了找到一个初始可行点,我不会同时考虑每个代理,而是在没有目标函数的情况下使用迭代循环进行优化阶段(使用 mdl.remove_objective) .我想,通过运行足够多的时间,它最终会为所有代理提供一个可行的解决方案。但是,CPLEX 得出的解决方案都非常相似。这使得无论我运行多少次,第 6 个代理都没有可行的解决方案。

我的问题是:如何在每次迭代中强制可行点是可行集中的实际随机点?因为看起来,也许从 CPLEX 用来寻找可行解决方案的捷径来看,它总是选择相似的解决方案。

(我知道我可以同时解决所有代理的初始可行点,但我仍然想知道是否可以做我想做的事)

谢谢!

【问题讨论】:

  • 您能解释一下什么是“代理”,以及它与变量、约束等建模概念的关系吗?
  • 嘿菲利普。我刚刚编辑了这个问题。我很抱歉最初的解释很糟糕,我希望现在可以理解了。谢谢

标签: cplex docplex


【解决方案1】:

两个想法:

  • 对于一个给定的模型实例,您可以尝试Model.populate_solution_pool,它会返回一组解决方案。
  • 其次,如果目标并不重要,但您想探索不同方向的可行解空间,您可以尝试在每次运行中设置不同的“随机”目标。 CPLEX 旨在为目标找到最佳解决方案;因此,设定目标是“驱动” cplex 在不同方向寻找解决方案的方式。 例如,生成二进制变量的子集,计算总和并尝试最大化该总和(或任何更适合您的情况的方法。)

也就是说,您的问题也可能非常紧凑,以至于不存在很多解决方案,而 CPLEX 总是依赖于相同的解决方案。 如果 CPLEX 日志显示找到的具有不同目标的解决方案很少,那么您就会知道会发生这种情况。

最后,将 mip emphasis 参数设置为 1(可行性)或 4(隐藏的可行性)可能有助于提高可行性而不是最优性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多