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

Julia-Jump整数规划优化模型:矩阵与向量相乘的约束问题

解决JuMP中员工工序分配时间约束的错误问题

我用JuMP构建了一个优化模型,包含三个二进制决策变量:

  • X[p,s]:工序p是否分配到工位s
  • Y[a,s]:员工a是否分配到工位s
  • Z[a,p]:员工a是否分配到工序p(取值1表示分配,0表示未分配)

需要编写约束保证每个员工被分配的总工序时间不超过节拍限制takt_lim,最初写的约束是:

@constraint(m, associate_takt[a in A, p in P], sum(Z[a, p]*Pt[p] for p in P) <= takt_lim)

后来错误地改成用value.(Z),导致报错OptimizeNotCalled():

@constraint(m, associate_takt[a in A, p in P], sum(value.(Z[a, p])*Pt[p] for p in P) <= takt_lim)

问题根源与修正

  1. 迭代器错误:原约束的迭代器[a in A, p in P]会为每一对员工-工序生成约束,但我们只需要为每个员工生成一个总时间约束,迭代器应该只保留[a in A]。
  2. 误用value()函数:value()是用来获取优化求解后变量的取值,在构建约束时直接使用变量Z[a,p]即可,不需要调用value()。

正确的约束写法:

@constraint(m, associate_takt[a in A], sum(Z[a, p] * Pt[p] for p in P) <= takt_lim)

解释

这个约束会对每个员工a,计算其所有被分配工序p的时间总和(Z[a,p]=1时计入Pt[p],否则不计),并确保总和不超过takt_lim,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:24:27