wanglu126
指派问题,丙不能完成D任务,则给以非常的完成时间,比如100000给它,这样就不会选择丙去执行D。优化目标是总的时间最小,约束条件是每人最多完成一项任务,每项任务至少由一个人完成。用LINGO,程序见附件,得到的结果如下 : Global optimal solution Objective value: 00000 Objective bound: 00000 Infeasibilities: 000000 Extended solver steps: 0 Total solver iterations: 0 Model Class: PILP Total variables: 16 Nonlinear variables: 0 Integer variables: 16 Total constraints: 9 Nonlinear constraints: 0 Total nonzeros: 48 Nonlinear nonzeros: 0 Variable Value Reduced Cost TIME( JIA, A) 000000 000000 TIME( JIA, B) 000000 000000 TIME( JIA, C) 000000 000000 TIME( JIA, D) 000000 000000 TIME( YI, A) 000000 000000 TIME( YI, B) 000000 000000 TIME( YI, C) 000000 000000 TIME( YI, D) 000000 000000 TIME( BING, A) 000000 000000 TIME( BING, B) 000000 000000 TIME( BING, C) 000000 000000 TIME( BING, D) 0 000000 TIME( DING, A) 00000 000000 TIME( DING, B) 000000 000000 TIME( DING, C) 000000 000000 TIME( DING, D) 00000 000000 ASSIGNMENT( JIA, A) 000000 000000 ASSIGNMENT( JIA, B) 000000 000000 ASSIGNMENT( JIA, C) 000000 000000 ASSIGNMENT( JIA, D) 000000 000000 ASSIGNMENT( YI, A) 000000 000000 ASSIGNMENT( YI, B) 000000 000000 ASSIGNMENT( YI, C) 000000 000000 ASSIGNMENT( YI, D) 000000 000000 ASSIGNMENT( BING, A) 000000 000000 ASSIGNMENT( BING, B) 000000 000000 ASSIGNMENT( BING, C) 000000 000000 ASSIGNMENT( BING, D) 000000 0 ASSIGNMENT( DING, A) 000000 00000 ASSIGNMENT( DING, B) 000000 000000 ASSIGNMENT( DING, C) 000000 000000 ASSIGNMENT( DING, D) 000000 00000 Row Slack or Surplus Dual Price 1 00000 -000000 2 000000 000000 3 000000 000000 4 000000 000000 5 000000 000000 6 000000 000000 7 000000 000000 8 000000 000000 9 000000 000000 
n个元素的最小问题用匈牙利法就可,即 将成本矩阵的各行减去该行的最小元素,使得每行都有0元素。 检查是否每行都有0元素,将没有0的那一行减去最小的元素,得到0 在矩阵中找到n个独立的0元素(不同行,不同列),这些0元素的位置就是 xij=1的时候,即将第i个人派去做第j件事情。 若不能找到n个独立的0,则用尽可能少的直线划去0(只能是整行或者整列划),然后将未划去的元素减去其中的最小元素,两直线的交叉处加上这个元素,其他直线上的点不做变化,反复进行这项操作就可得到n个独立的若为最大问题,则选出最大利润,用这个值减去利润矩阵中的每个元素,之后再进行以上匈牙利法操作,得到最有指派结果。