为所有代理寻找初始可行解
Find initial feasible solution for all agents
编辑以获得更好的解释(对不起)。
我有一个半分散的优化问题。我所说的半去中心化是指:我有一个聚合器来控制每个代理的最佳响应,但这些代理有一个单独的成本函数(所有变量和约束都被复制)。理论上,我只需要找到一个初始可行点(对于所有代理),然后通过迭代解决每个代理的优化问题,它收敛到一个最优值。
我的问题是,为了找到一个初始可行点,我没有同时考虑每个智能体,而是在没有 objective 函数的情况下使用迭代循环进行优化阶段(mdl.remove_objective)。我想,通过 运行 足够多次,它最终会为所有代理找到一个可行的解决方案。但是,CPLEX 得出的解决方案都非常相似。这使得第 6 个代理没有可能的可行解决方案,无论我运行 多少次。
我的问题是:如何在每次迭代中强制可行点是可行集内的实际随机点?因为看起来,也许从 CPLEX 用来寻找可行解决方案的捷径来看,它总是选择相似的解决方案。
(我知道我可以同时解决所有代理的初始可行点,但我仍然想知道是否可以做我想做的事)
谢谢!
两个想法:
- 对于一个给定的模型实例,您可以尝试
Model.populate_solution_pool
其中 returns 一组解决方案。
- 其次,如果objective不是很重要,但你想从不同的方向探索可行解space,你可以尝试设置不同的“随机”objective每个 运行 中的 s。 CPLEX 旨在为 objective; 找到最佳解决方案;因此设置 objective 是“驱动”cplex 在不同方向寻找解决方案的方法。
例如,生成二进制变量的子集,计算总和并尝试最大化该总和(或任何更适合您的情况。)
也就是说,也可能发生您的问题太紧以致于不存在很多解决方案,并且 CPLEX 总是回退到相同的解决方案。
如果 CPLEX 日志显示使用不同 objective 找到的解决方案很少,那么您就会知道发生了什么。
最后,将 mip emphasis
参数设置为 1(可行性)或 4(隐藏可行性)可能有助于使可行性优于最优性。
编辑以获得更好的解释(对不起)。
我有一个半分散的优化问题。我所说的半去中心化是指:我有一个聚合器来控制每个代理的最佳响应,但这些代理有一个单独的成本函数(所有变量和约束都被复制)。理论上,我只需要找到一个初始可行点(对于所有代理),然后通过迭代解决每个代理的优化问题,它收敛到一个最优值。
我的问题是,为了找到一个初始可行点,我没有同时考虑每个智能体,而是在没有 objective 函数的情况下使用迭代循环进行优化阶段(mdl.remove_objective)。我想,通过 运行 足够多次,它最终会为所有代理找到一个可行的解决方案。但是,CPLEX 得出的解决方案都非常相似。这使得第 6 个代理没有可能的可行解决方案,无论我运行 多少次。
我的问题是:如何在每次迭代中强制可行点是可行集内的实际随机点?因为看起来,也许从 CPLEX 用来寻找可行解决方案的捷径来看,它总是选择相似的解决方案。
(我知道我可以同时解决所有代理的初始可行点,但我仍然想知道是否可以做我想做的事)
谢谢!
两个想法:
- 对于一个给定的模型实例,您可以尝试
Model.populate_solution_pool
其中 returns 一组解决方案。 - 其次,如果objective不是很重要,但你想从不同的方向探索可行解space,你可以尝试设置不同的“随机”objective每个 运行 中的 s。 CPLEX 旨在为 objective; 找到最佳解决方案;因此设置 objective 是“驱动”cplex 在不同方向寻找解决方案的方法。 例如,生成二进制变量的子集,计算总和并尝试最大化该总和(或任何更适合您的情况。)
也就是说,也可能发生您的问题太紧以致于不存在很多解决方案,并且 CPLEX 总是回退到相同的解决方案。 如果 CPLEX 日志显示使用不同 objective 找到的解决方案很少,那么您就会知道发生了什么。
最后,将 mip emphasis
参数设置为 1(可行性)或 4(隐藏可行性)可能有助于使可行性优于最优性。