最重要的是理解“集合”(SET)及其“属性”( Attribute)的概念 例1: SALLCO公司需要决定下四个季度的帆船生产量。 下四个季度的帆船需求量分别是40条,60条,75条, 25条,这些需求必须按时满足。每个季度正常的生产能 力是40条帆船,每条船的生产费用为400美元。如果 加班生产,每条船的生产费用为450美元。每个季度末 每条船的库存费用为20美元。 假定生产提前期为0,初始库存为10条船。如何安排 生产可使总费用最小? 用DEM,RP,OP,INV分别表示需求、正常生产的产量 加班生产的产量、库存量,则DEM,RP,OP,INV对每个 季度都应该有一个对应的值,也就说他们都应该是一个由 4个元素组成的数组,其中DEM是已知的,而 RP,OP,INV是未知数
最重要的是理解“集合”(SET)及其“属性”(Attribute)的概念 例1:SAILCO 公司需要决定下四个季度的帆船生产量。 下四个季度的帆船需求量分别是40 条,60 条,75 条, 25 条,这些需求必须按时满足。每个季度正常的生产能 力是40 条帆船,每条船的生产费用为400 美元。如果 加班生产,每条船的生产费用为450 美元。每个季度末, 每条船的库存费用为20 美元。 假定生产提前期为0,初始库存为10 条船。如何安排 生产可使总费用最小? 用DEM,RP,OP,INV 分别表示需求、正常生产的产量、 加班生产的产量、库存量,则DEM,RP,OP,INV 对每个 季度都应该有一个对应的值,也就说他们都应该是一个由 4 个元素组成的数组,其中DEM 是已知的,而 RP,OP,INV 是未知数
目标函数:MN∑{400RP(1)+4500P(1)+20N() i=1,2,3,4 约束条件1(能力限制):RP(工)<40,工=1,2,3,4 约束条件2(产品数量的平衡方程) INV(I=INV(I-1)+RP(I)+OP(I)-DEM(I), I=1, 2, 3, 4 INV(0)=10; 利用数组的概念 约束条件3:变量的非负约束 1 QUARTERS集合的属性 QUARTERS RP OP INV 1,2,3 4}称为集合, DEM RP O P,INV称 2 3 为该集合的 QUARTERS集合 属性
{ } 1,2,3,4 400 ( ) 450 ( ) 20 ( ) i MIN RP I OP I INV I = 目标函数 : ∑ + + 约束条件1(能力限制): RP(I)<40,I=1,2,3,4; 约束条件2(产品数量的平衡方程): INV(I)=INV(I-1)+RP(I)+OP(I)-DEM(I),I=1,2,3,4; INV(0)=10; 利用数组的概念 约束条件3: 变量的非负约束 QUARTERS ={1,2,3, 4}称为集合, DEM,RP,O P,INV 称 为该集合的 属性
循环函数”@FOR(集合:约束关系式)”的方式定义的, 意思是对冒号“:”前面的集 合的每个元素(下标),冒号“:”后面的约束关系式都 MODEL:要成立。由于下标=1时的约束关系式与i=2,3,4 SETS 时有所区别,所以对下标集合的元素(下标)加了一个 QUARTI|“i#GT#1”的限制条件,而把1=1时的约束关系式单独 ENDSET写出。限制条件“i#GT#1”是一个逻辑表达式,意思就 DATA:凵是i1 Objective value: 78450.00 DEM=40.60.7525: ENDDATA Variable Value Reduced Cost DEM( 1) 40.00000 0.000000 !初始段省略; DEM( 2) DEM( 3) 75.0000o 0.000000 MIN=@SUM(QUART 5: 400*RP+45 DEMY( 4) 25.00000 0.000000 40.00000 0.000000 目标函数 RP(2) 40.00000 0.000000 Rp( 3) 40.00000 0.000000 @FOR(QUARTERSO: RP(<40); !HE/ RP( 4 25.00000 0.000000 0.000o00 20.00000 @FOR( QUARTERS(川#GT#1:!产品0p(2 10.00000 0.000000 INV(=INV(-1)+RP+OPD-DEM( 0P(3) 0P(4) 0.000000 50.00000 INV(l)=10+RP(1)+OP(1)-DEM(1); INU( 1) 10.00000 0.000000 IW《2) 0.000000 20.00000 END 工N(3 0.000000 70.00000 INV( 4) 0.000000 420.0000
MODEL: SETS: QUARTERS/1..4/:DEM,RP,OP,INV;! 定义集合及其属性; ENDSETS DATA: DEM=40,60,75,25; ENDDATA !初始段省略; MIN=@SUM(QUARTERS:400*RP+450*OP+20*INV); !目标函数; @FOR(QUARTERS(I):RP(I)<40);!能力约束; @FOR(QUARTERS(I)|I#GT#1:!产品数量的平衡方程; INV(I)=INV(I-1)+RP(I)+OP(I)-DEM(I);); INV(1)=10+RP(1)+OP(1)-DEM(1); END 作用在于对集合的属性(数组)输入必要 的常数数据。 格式为:attribute = value_list 用求和函数”@SUM(集合:表达式)”的方式定义的,这 个函数的功能是对冒号“:”后面的表达式,按照冒号“:” 前面的下标集合指定的下标进行求和。由于本例中目标 函数对所有下标都要求和,所以我们连下标i 也省去了; 如果不省略,目标函数也可以等价地写成 “@SUM(QUARTERS(i): 400*RP(i) +450*OP(i) +20*INV(i) )” 循环函数”@FOR(集合:约束关系式)”的方式定义的, 意思是对冒号“:”前面的集 合的每个元素(下标),冒号“:”后面的约束关系式都 要成立。由于下标i=1 时的约束关系式与i=2,3,4 时有所区别,所以对下标集合的元素(下标)加了一个 “i#GT#1”的限制条件,而把i=1 时的约束关系式单独 写出。限制条件“i#GT#1”是一个逻辑表达式,意思就 是i>1