Matlab学习系列27 多目标规划.docx

上传人:b****7 文档编号:11156039 上传时间:2023-02-25 格式:DOCX 页数:13 大小:73.63KB
下载 相关 举报
Matlab学习系列27 多目标规划.docx_第1页
第1页 / 共13页
Matlab学习系列27 多目标规划.docx_第2页
第2页 / 共13页
Matlab学习系列27 多目标规划.docx_第3页
第3页 / 共13页
Matlab学习系列27 多目标规划.docx_第4页
第4页 / 共13页
Matlab学习系列27 多目标规划.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Matlab学习系列27 多目标规划.docx

《Matlab学习系列27 多目标规划.docx》由会员分享,可在线阅读,更多相关《Matlab学习系列27 多目标规划.docx(13页珍藏版)》请在冰豆网上搜索。

Matlab学习系列27 多目标规划.docx

Matlab学习系列27多目标规划

27.多目标规划

一、线性规划的局限性

1.线性规划要求所求解问题必须满足全部的约束,而实际问题中并非所有约束都需要严格的满足;

2.线性规划只能处理单目标的优化问题,从而对一些次目标只能转化为约束处理,而实际问题中,目标和约束是可以相互转化的,处理时不一定要严格区分;

3.线性规划在处理问题时,将各个约束(也可看成目标)的地位看成同等重要,实际问题中,各个目标的重要性有层次上的差别,在同一层次也可能有不同权重;

4.线性规划寻找最优解,而许多实际问题只要找到满意解就可以了。

例1(线性规划——生产安排问题)某企业生产甲、乙两种产品,需要用到A,B,C三种设备,每天产品盈利与设备使用工时及限制如下表:

设备生产能力/h

A/(h/件)

2

2

12

B/(h/件)

4

0

16

C/(h/件)

0

5

15

盈利/(元/件)

200

300

问:

该企业应如何安排生产,能使总利润最大?

解:

设甲乙产品的产量分别为x1,x2,建立线性规划模型:

用Lingo可求得最优解:

x1=3,x2=3,z*=1500.

但实际上,企业的经营目标不仅仅是利润,还需要考虑多个方面,比如:

增加下列因素(目标)

(1)力求使利润不低于1500元;

(2)考虑市场需求,甲乙两种产品的产量比应尽量保持1:

2;

(3)设备A位贵重设备,严格禁止超时使用;

(4)设备C可以适当加班,但要控制,设备B既要求充分利用,又尽可能不加班,在重要性上,设备B是设备C的3倍。

这就需要用目标规划。

二、目标规划的基本概念

1.设置偏差变量

偏差变量——表示实际值与目标值之间的差异;

d+——表示超出目标的差值,称为正偏差变量;当实际值超过目标值时,有d-=0,d+>0;

d-——表示未达到目标的差值,称为负偏差变量;当实际值未达到目标值时,有d+=0,d->0.

注:

若实际值与目标值一致,有d-=d+=0.

2.统一处理目标与约束

目标规划中,约束有两类,一类是对资源有严格限制的,用严格的等式或不等式约束来处理(同线性规划),例如,例1中设备A禁止超时使用,则有刚性约束:

另一类约束是可以不严格限制的,连同原线性规划的目标,构成柔性约束,例如,例1中希望利润不低于1500元,则目标可表示为

甲乙两种产品产量尽量保持1:

2的比例,则目标可表示为

设备C可以适当加班,但要控制,则目标可表示为

设备B要求充分利用,又尽可能不加班,则目标可表示为

结论:

若希望不等式保持大于等于,则极小化负偏差;若希望不等式保持小于等于,则极小化正偏差;若希望保持等式,则同时极小化正负偏差。

3.目标的优先级与权系数

目标规划中,目标的优先分为两个层面,第一个层面是目标分成不同的优先级,在求解目标规划时,必须先优化优先级高的目标,再优化优先级低的目标;通常用P1,P2,…表示不同的因子,并规定Pk>>Pk+1.

第二个层面是目标处于同一优先级,但两个目标的权重不同,此时应两目标同时优化,但用权重系数的大小来表示目标重要性的差别。

目标规划建模中,除刚性约束必须严格满足外,对所有目标约束均允许有偏差。

其求解过程要从高到低逐层优化,中不增加高层次目标的偏差值的情况下,逐次使低层次的偏差达到极小。

例1按目标规划的方法可建立如下目标规划模型:

设备A是刚性约束,其余是柔性约束;首先,最重要的指标是企业的利润,故将其优先级列为第一级;其次,甲乙两种产品的产量保持1:

2的比例,列为第二级;再次,设备C,B的工作时间要有所控制,列为第三级。

中第三级中,设备B的重要性是设备C的3倍,因此其权重不一样,设备B前的系数是C前系数的3倍,于是得到:

三、目标规划模型的一般形式:

是目标规划的决策变量,共有m个刚性约束(等式或不等式约束),有l个柔性目标约束,其目标规划约束的偏差为

,有个q优先级别,分别为

,在同一个优先级

中有不同的权重,分别记为

,则目标规划模型的一般形式为:

注:

建立目标规划模型时,需要确定目标值、优先等级、权系数等,这些具有一定的主观性和模糊性,可以用专家评定法予以量化。

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

例1模型的求解:

Lingo代码:

 

附录:

Lingo语法

(二)

以料场选址问题为例:

建筑工地的位置用平面坐标a,b表示(距离单位km);水泥日用量(单位t)由下表给出:

表工地的位置(a,b)及水泥日用量

1

2

3

4

5

6

a

1.25

8.75

0.5

5.75

3

7.25

b

1.25

0.75

4.75

5

6.5

7.75

d

3

5

4

7

6

11

目前想设置两个临时料场,日储量各有20t,问两个料场选址在何处,分别向各工地运送多少吨水泥,能使总的吨公里数最小?

求解:

记工地的位置为(ai,bi),水泥的日用量为di,i=1,…,6;料场位置为(xi,yi),日储量为ej,j=1,2;从料场j向工地i的运送量为cij,则该问题的数学规划模型为:

Lingo代码:

MODEL:

TitleLocationProblem;

sets:

demand/1..6/:

a,b,d;

supply/1,2/:

x,y,e;

link(demand,supply):

c;

endsets

data:

!

locationsforthedemand(需求点的位置);

a=1.25,8.75,0.5,5.75,3,7.25;

b=1.25,0.75,4.75,5,6.5,7.75;

!

quantitiesofthedemandandsupply(供需量);

d=3,5,4,7,6,11;

e=20,20;

enddata

init:

!

initiallocationsforthesupply(初始点);

x,y=5,1,2,7;

endinit

!

Objectivefunction(目标);

[OBJ]min=@sum(link(i,j):

c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));

!

demandconstrains(需求约束);

@for(demand(i):

[DEMAND_CON]@sum(supply(j):

c(i,j))=d(i););

!

supplyconstrains(供应约束);

@for(supply(j):

[SUPPLY_CON]@sum(demand(i):

c(i,j))<=e(j););

@for(supply:

@free(x);@free(y););

END

Lingo程序的一般结构:

程序是以MODEL:

开始,以END结束。

主体通常分为5个部分:

(1)集合段;

(2)数据段;(3)初始段;(4)计算段;(5)目标与约束段。

一、集合段

以“SET:

”开始,以“ENDSET”结束;用来定义必要的集合变量及元素、属性,相当于数组。

sets:

demand/1..6/:

a,b,d;

supply/1,2/:

x,y,e;

link(demand,supply):

c;

endsets

表示集合1名称为demand,元素为1…6,即demand={1,2,3,4,5,6},该集合的属性有a,b,d

“集合的属性相当于以集合的元素为下标的数组”

即相当于demand定义了如下数组的:

a

(1),a

(2),a(3),a(4),a(5),a(6)

b

(1),b

(2),b(3),b(4),b(5),b(6)

d

(1),d

(2),d(3),d(4),d(5),d(6)

类似地,supply定义了如下数组

x

(1),x

(2),y

(1),y

(2),e

(1),e

(2)

注1:

1,2,3,4可简写为1..4;

注2:

若无属性列表,则该集合往往是作为循环变量来使用,或用来构造派生集合;

注3:

若无元素列表,则必须在程序的数据段以赋值语句方式给出元素列表。

派生集合:

为了处理有两个下标的数组,引入派生集合:

link(demand,supply):

c;

表示link={(s,t):

s∈demand,t∈supply},即笛卡尔积;其属性c则为6×2矩阵(二维数组):

c(1,1),c(1,2)

c(2,1),c(2,2)

c(3,1),c(3,2)

c(4,1),c(4,2)

c(5,1),c(5,2)

c(6,1),c(6,2)

注:

demand和supply称为link的父集合。

二、数据段

以“DATA:

”开始,以“ENDDATA”结束;用来对集合的属性(数组)输入必要的常数数据。

data:

a=1.25,8.75,0.5,5.75,3,7.25;

b=1.25,0.75,4.75,5,6.5,7.75;

d=3,5,4,7,6,11;

e=20,20;

enddata

对集合的属性输入必要的常数数据,赋值结果为:

a

(1)=1.25,a

(2)=8.75,……,a(6)=7.25

b

(1)=1.25,b

(2)=0.75,……,b(6)=7.75

d

(1)=3,d

(2)=5,……,d(6)=11

e

(1)=20,e

(2)=20

若需要在运行时才对单变量(不能是属性变量,数组)参数赋值,可以在数据段使用输入语句:

例如

A=?

;

在求解时,Lingo将给出提示界面,等待用户输入变量A的数值。

三、初始段

以“INIT:

”开始,以“ENDINIT”结束;用来对集合的属性(数组)定义初始值,一般作为迭代用。

init:

x,y=5,1,2,7;

endinit

这里与数据段的赋值一样。

注意:

变量x,y一起赋值时的赋值顺序,相当于

x

(1)=5,y

(1)=1,x

(2)=2,y

(2)=7

同“x=5,2;y=1,7;”

四、计算段

以“CALC:

”开始,以“ENDCALC”结束;用来对原始数据进行计算处理。

例如,

CALC:

T_d=@SUM(demand:

d);!

总日用量;

A_d=T_d/@size(demand);!

平均日用量;

ENDCALC

其中,函数@size(demand)返回demand的元素个数。

五、目标和约束段

除上述四段之外的部分,无开始、结束标志;是模型的主体,用来定义目标函数和约束条件。

1.目标函数:

[OBJ]min=sum(link(i,j):

c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));

@sum函数,派生集合(二维数组)link关于索引i,j对表达式求和;

2.约束条件1:

@for(demand(i):

[DEMAND_CON]@sum(supply(j):

c(i,j))=d(i););

@for函数,对集合demand的每个索引i,应用求和表达式,集合supply关于索引j对表达式求和;

约束条件2:

@for(supply(j):

[SUPPLY_CON]@sum(demand(i):

c(i,j))<=e(j););

@for函数,对集合supply的每个索引i,应用求和表达式,集合supply关于索引j对表达式求和;

@for(supply:

@free(X);@free(Y););

@for函数对集合supply所有元素,@free函数取消x,y的非负限制。

运行结果:

Localoptimalsolutionfound.

Objectivevalue:

85.26604

Infeasibilities:

0.000000

Totalsolveriterations:

68

 

ModelTitle:

LocationProblem

VariableValueReducedCost

A

(1)1.2500000.000000

A

(2)8.7500000.000000

A(3)0.50000000.000000

A(4)5.7500000.000000

A(5)3.0000000.000000

A(6)7.2500000.000000

B

(1)1.2500000.000000

B

(2)0.75000000.000000

B(3)4.7500000.000000

B(4)5.0000000.000000

B(5)6.5000000.000000

B(6)7.7500000.000000

D

(1)3.0000000.000000

D

(2)5.0000000.000000

D(3)4.0000000.000000

D(4)7.0000000.000000

D(5)6.0000000.000000

D(6)11.000000.000000

X

(1)3.2548830.000000

X

(2)7.250000-0.1853513E-05

Y

(1)5.6523320.000000

Y

(2)7.750000-0.1114154E-05

E

(1)20.000000.000000

E

(2)20.000000.000000

C(1,1)3.0000000.000000

C(1,2)0.0000004.008540

C(2,1)0.0000000.2051358

C(2,2)5.0000000.000000

C(3,1)4.0000000.000000

C(3,2)0.0000004.487750

C(4,1)7.0000000.000000

C(4,2)0.0000000.5535090

C(5,1)6.0000000.000000

C(5,2)0.0000003.544853

C(6,1)0.0000004.512336

C(6,2)11.000000.000000

RowSlackorSurplusDualPrice

OBJ85.26604-1.000000

DEMAND_CON

(1)0.000000-4.837363

DEMAND_CON

(2)0.000000-7.158911

DEMAND_CON(3)0.000000-2.898893

DEMAND_CON(4)0.000000-2.578982

DEMAND_CON(5)0.000000-0.8851584

DEMAND_CON(6)0.0000000.000000

SUPPLY_CON

(1)0.0000000.000000

SUPPLY_CON

(2)4.0000000.000000

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1