目标规划GP

目标规划 GP 
 
一、目标规划简介 
        线性规划只能解决一组线性约束条件下,一个目标的最大值或最小值的问题。在实际
决策中,衡量方案优劣要考虑多个目标,这些目标中,有主要的,也有次要的;有最大值
的,也有最小值的;有定量的,也有定性的;有相互对立的,也有相互补充的。对于这些
问题,线性规划无法求解。 
       目标规划是在线性规划的基础上,为适应经济管理中多目标决策的需要而逐步发展起
来的一个分支。

1、目标规划与线性规划的比较 
(1)线性规划只讨论一个线性目标函数在一组线性约束条件下的极值问题;而目标规划是
多个目标决策,可求得更切合实际的解。 
(2)线性规划求最优解;目标规划是找到一个满意解。(最优解≠满意解) 
(3)线性规划中的约束条件是同等重要的,是硬约束;而目标规划中有轻重缓急和主次之
分,即有优先权。

2、目标规划的求解思路 
(1)加权系数法 
为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确定合理
的权系数,以反映不同目标之间的重要程度。 
(2)优先等级法 
将各目标按其重要程度不同的优先等级,转化为单目标模型。 
 
二、目标规划的数学模型 
为了具体说明目标规划与线性规划在处理问题方法上的区别,通过例子来介绍目标规划
的有关概念及数学模型。 
例 1:某工厂生产 I,II 两种产品,已知有关数据见表 1,试求获利最大的生产方案。 
                                                        表 1:生产数据表 

 

I

II

拥有量

原材料/kg

2

1

11

扫描二维码关注公众号,回复: 2863884 查看本文章

设备生产能力/h

1

2

10

利润/(万元/件)

8

10

 

三、实例

1、问题:

       某计算机公司生产三种型号的笔记本电脑A,B,C。这三种笔记本电脑需要在复杂

的装配线上生产,生产1台A,B,C型号的笔记本电脑分别需要5,8,12(h)。公司装

配线正常的生产时间是每月1700h。公司营业部门估计A,B,C三种笔记本电脑的利润分

别是每台1000,1440,2520(元),而公司预测这个月生产的笔记本电脑能够全部售

出。公司经理考虑以下目标:

第一目标:充分利用正常的生产能力,避免开工不足;

第二目标:优先满足老客户的需求,A,B,C三种型号的电脑分别为50,50,80(台),

同时根据三种电脑的纯利润分配不同的权因子;

第三目标:限制装配线加班时间,不能超过200h;

第四目标:满足各种型号电脑的销售目标,A,B,C型号分别为100,120,100(台),

再根据三种电脑的纯利润分配不同的权因子;

第五目标:装配线的加班时间尽可能少。

请列出相应的目标规划模型,并用LINGO软件求解。

3、LINGO求解

(1)求解目标规划的序贯算法

核心是根据优先级的先后次序,将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。

(2)程序:

model:
sets:
level/1..5/:z,goal;!z为中间变量;
var/1..3/:d,x;
s_con_num/1..8/:g,dplus,dminus;
s_con(s_con_num,var):c;
obj(level,s_con_num)/1 1,2 2,2 3,2 4,3 8,4 5,4 6,4 7,5 1/:wplus,wminus;
endsets
data:
g=1700 50 50 80 100 120 100 1900;
c=5 8 12 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 5 8 12;
d=1000 1440 2520;
wplus=0 0 0 0 1 0 0 0 1;
wminus=1 200 180 210 0 200 180 210 0;
enddata
submodel subgoal:!定义数学规划的子函数;
min=myobj;!目标函数;
myobj=z(flag);
@for(level(i):z(i)=@sum(obj(i,j):wplus(i,j)*dplus(j)+wminus(i,j)*dminus(j)));
@for(s_con_num(i):@sum(var(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i));!定义目标约束;
@for(level(i)|i#lt#flag:@bnd(0,z(i),goal(i)));
@for(variable:@gin(x));!定义整数变量约束;
T=@sum(var:d*x);!求满意解对应的利润;
endsubmodel
calc:
@for(level(k):flag=k;@solve(subgoal);goal(k)=myobj);!调用子函数;
endcalc
end

猜你喜欢

转载自blog.csdn.net/qq_40581789/article/details/81161359
GP