You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中MILP模型转Simulated Annealing求解的扰动与约束问题咨询

MILP转模拟退火求解的改进方案

扰动生成优化

  • 整数变量局部邻域调整:放弃全量随机重置,对单个整数变量做±1的微调(先检查变量上下界,确保调整后在可行范围内),每次仅扰动1-2个整数变量,避免解的突变幅度过大。
  • 连续变量小范围采样:基于当前解执行高斯扰动,公式为 新值 = 当前值 + N(0, σ),其中σ取变量值域的5%-10%;每次仅扰动部分连续变量,而非全部变量同时调整。
  • 分层动态扰动:迭代前期适当扩大扰动范围(如σ设为值域的15%),配合高温阶段的探索需求;后期缩小扰动范围,聚焦于当前最优解邻域的 exploitation。

无惩罚函数的约束硬处理

  • 扰动后即时修复:生成扰动解后立刻校验约束:
    • 等式约束:若为线性约束(如 a₁x₁ + a₂x₂ = b),固定多数变量,反推单个变量的取值(优先调整连续变量,避免破坏整数变量的可行性)。
    • 不等式约束:若变量违反边界,直接将其拉回约束边界(连续变量设为边界值,整数变量取最近的可行整数值)。
  • 可行域内采样:扰动时直接限定在可行域内生成新值:整数变量仅在其可行整数集合中选邻域值,连续变量在约束上下界内做高斯采样,从源头减少不可行解。

迭代逻辑优化

  • 温度调度调整:若迭代中成本无变化,说明初始温度过低或降温过快。可将初始温度设为初始可行解成本的50%-100%,降温速率调整为 T = T * 0.95(慢于常规的0.8)。
  • 接受准则补充:在Metropolis准则基础上,每100次迭代强制接受1次更差的解,避免算法过早收敛到局部最优。
  • 最优解追踪:每次迭代后,无论是否接受新解,都要记录当前找到的最优可行解,防止因接受差解丢失已找到的最优值。

调试验证步骤

  • 单独测试扰动函数:固定一个已知可行解,多次运行扰动函数,检查输出解的约束满足情况与多样性——若解几乎无变化,说明扰动范围过小;若大量解不可行,说明扰动逻辑存在漏洞。
  • 对标Pulp最优解结构:分析Pulp得到的最优解中整数变量的取值、连续变量的分布特征,在初始化与扰动时优先调整与该最优解差异较大的变量,引导算法向全局最优区域靠近。

内容的提问来源于stack exchange,提问作者Ferreira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 21:08:43