[讨论]令我疑惑的一道题
<p>这是湖南的一个网友的问题 </p><p>公司生产 , , 三种产品,售价分别为12元,7元和6元.生产每单位产品 需要1小时技术服务,10小时直接劳动, 3千克材料;生产每单位产品 需要2小时服务,4小时直接劳动,2千克材料; 生产每单位产品 需要1小时服务,5小时直接劳动,1千克材料.现在最多只能提供100小时技术服务,700小时直接劳动,400千克材料.生产成本是生产量的非线性函数,如下所示:</p>
<p> 产品 产品 产品 </p>
<table cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td valign="top" width="79">
<p>产量</p></td>
<td valign="top" width="108">
<p>单位成本</p></td>
<td valign="top" width="84">
<p>产量</p></td>
<td valign="top" width="96">
<p>单位成本</p></td>
<td valign="top" width="96">
<p>产量</p></td>
<td valign="top" width="96">
<p>单位成本</p></td></tr>
<tr>
<td valign="top" width="79">
<p>0-40</p>
<p>40-100 </p>
<p>100-150</p>
<p>150以上</p></td>
<td valign="top" width="108">
<p> 10</p>
<p> 9</p>
<p> 8</p>
<p> 7</p></td>
<td valign="top" width="84">
<p>0-50</p>
<p>50-100 </p>
<p>100以上</p></td>
<td valign="top" width="96">
<p> 6</p>
<p> 4</p>
<p> 3</p></td>
<td valign="top" width="96">
<p>0-100 </p>
<p>100以上</p></td>
<td valign="top" width="96">
<p> 5</p>
<p> 4</p></td></tr></tbody></table>
<p> 要求建立一个总利润最大的生产计划模型;并编程计算出生产计划及总利润.</p>
<p> </p>
<p>我用lingo建立的了一个程序,代码如下:</p>
<p><br/><font face="Verdana">model:<br/>max=(12*x1+7*x2+6*x3)-(c1+c2+c3);<br/>c1=(@if(x1 #le# 40,10,@if(x1 #le# 100,9,@if(x1 #le# 150,8,7))))*x1;<br/>c2=(@if(x2 #le# 50,6,@if(x2 #le# 100,4,3)))*x2;<br/>c3=(@if(x3 #le# 100,5,4))*x3;<br/>x1+2*x2+x3<100;<br/>10*x1+4*x2+5*x3<700;<br/>3*x1+2*x2+x3<400;<br/>@gin(x1);@gin(x2);<br/>@gin(x3);<br/>end</font></p>
<p> </p>
<p>或者见附件里的lingo程序:</p>
<p> </p>
<p></p>
<p> </p>
<p>我的疑惑是,我的lingo9解出的结果是:</p>
<p><font face="Verdana">Linearization components added:<br/> Constraints: 90<br/> Variables: 60<br/> Integers: 36</font></p>
<p><font face="Verdana"> Local optimal solution found.<br/> Objective value: 150.0000<br/> Extended solver steps: 0<br/> Total solver iterations: 435</font></p><font face="Verdana">
<p><br/> Variable Value Reduced Cost<br/> X1 0.000000 0.000000<br/> X2 50.00000 0.6000000<br/> X3 0.000000 0.000000<br/> C1 0.000000 0.000000<br/> C2 200.0000 0.000000<br/> C3 0.000000 0.2000000</p>
<p> Row Slack or Surplus Dual Price<br/> 1 150.0000 1.000000<br/> 2 0.000000 -1.000000<br/> 3 0.000000 -1.000000<br/> 4 0.000000 -0.8000000<br/> 5 0.000000 2.000000<br/> 6 500.0000 0.000000<br/> 7 300.0000 0.000000<br/></font></p>
<p> </p>
<p>而湖南网友的lingo10解出的结果是:</p>
<p> </p>
<p><font face="Verdana">Linearization components added:<br/> Constraints: 90<br/> Variables: 60<br/> Integers: 36</font></p>
<p><font face="Verdana"> Local optimal solution found.<br/> Objective value: 210.0000<br/> Extended solver steps: 0<br/> Total solver iterations: 83</font></p><font face="Verdana">
<p><br/> Variable Value Reduced Cost<br/> X1 70.00000 -0.9000000<br/> X2 0.000000 0.000000<br/> X3 0.000000 0.2500000<br/> C1 630.0000 0.000000<br/> C2 0.000000 0.000000<br/> C3 0.000000 0.000000</p>
<p> Row Slack or Surplus Dual Price<br/> 1 210.0000 1.000000<br/> 2 0.000000 -1.000000<br/> 3 0.000000 -1.000000<br/> 4 0.000000 -1.000000<br/> 5 30.00000 0.000000<br/> 6 0.000000 0.2500000<br/> 7 190.0000 0.000000</p>
<p> </p>
<p><br/> </p></font>
<p><font size="4">不知道这是什么原因,我百思不得其解,请有兴趣的网友把程序拿去运行以下,然后把您的结果发出来讨论一下。</font><br/></p>
[此贴子已经被作者于2008-8-17 21:53:24编辑过] 找到的是局部最优解,当然会有不同,这样看lingo10要比lingo9有一定的改进,所以得到的局部最优解比较好! 整形非线性规划问题,Lingo解起来是比较辛苦的。估计是高版本的Lingo在非线性规划问题求解上面有所改善吧。 我用lingo11算出的结果是:
Global optimal solution found.
Objective value: 210.0000
Objective bound: 210.0000
Infeasibilities: 0.000000
Extended solver steps: 1
Total solver iterations: 30
Variable Value Reduced Cost
X1 70.00000 -3.000000
X2 0.000000 -1.000000
X3 0.000000 -1.000000
C1 630.0000 0.000000
C2 0.000000 0.000000
C3 0.000000 0.000000
Row Slack or Surplus Dual Price
1 210.0000 1.000000
2 0.000000 -1.000000
3 0.000000 -1.000000
4 0.000000 -1.000000
5 30.00000 0.000000
6 0.000000 0.000000
7 190.0000 0.000000
自己看着办吧。
页:
[1]