数学建模
cij 指第i个人完成第j个任务需要的时间(效率矩阵)
决策变量 xij 若由第i个人完成第j项任务 xij = 1,否则 xij = 0
数学模型
m
i
n
z
=
∑
∑
c
i
j
∗
x
i
j
s
.
t
.
{
∑
j
x
i
j
=
1
∑
i
x
i
j
=
1
x
i
j
∈
{
0
,
1
}
,
i
,
j
=
{
1
,
2
,
3
,
4
,
5
}
min z = \sum\sum cij * xij \\ s.t. \left \{ \begin{matrix} \sum_j xij = 1\\ \sum_i xij = 1\\ xij \in \{0,1\},i,j = \{1,2,3,4,5\} \end{matrix} \right.
minz=∑∑cij∗xijs.t.⎩
⎨
⎧∑jxij=1∑ixij=1xij∈{0,1},i,j={1,2,3,4,5}
lingo 建模
建立集合
建立人员集合
worker/1,2,3,4,5/;
建立任务集合
assignment/A,B,C,D,E/;
建立联系集合(每个人和每个任务之间)
在联系集合上定义效用集合C,和决策变量X
link(worker,assignment):C,X;
赋值
DATA:
C =
8 6 10 9 12
12 10 7 15 9
7 4 3 5 6
9 5 4 12 8
4 11 6 7 15;
ENDDATA
目标函数
总费用最小
MIN = @sum(link(i,j): c(i,j) * x(i,j));
约束条件
1.每人只完成一个任务
@for(worker(i): @sum(assignment(j): x(i,j)) = 1);
2.每个任务只有一个人做
@for(assignment(j):@sum(worker(i): x(i,j)) = 1);
3.决策变量X是01变量
@for(link(i,j): @bin(x(i,j)));
完整代码
MODEL:
SETS:
worker/1,2,3,4,5/;
assignment/A,B,C,D,E/;
link(worker,assignment):C,X;
ENDSETS
DATA:
C =
8 6 10 9 12
12 10 7 15 9
7 4 3 5 6
9 5 4 12 8
4 11 6 7 15;
ENDDATA
MIN = @sum(link(i,j): c(i,j) * x(i,j));
@for(worker(i): @sum(assignment(j): x(i,j)) = 1);
@for(assignment(j):@sum(worker(i): x(i,j)) = 1);
@for(link(i,j): @bin(x(i,j)));
END
生产计划的建模与求解
题目
数学建模
productioni 表示第i个设备的生产能力
profitj 表示第j 个产品的利润
tij 表示第i个设备加工第j个产品的时间
决策变量Xj 指第j个产品生产几个
m
a
x
z
=
∑
j
x
j
∗
p
r
o
f
i
t
j
s
.
t
.
{
∑
j
x
j
∗
t
i
j
≤
p
r
o
d
u
c
t
i
o
n
i
max z = \sum_j xj * profitj \\ s.t. \left\{ \begin{matrix} \sum_j xj * tij \leq productioni \\ \end{matrix} \right.
maxz=j∑xj∗profitjs.t.{∑jxj∗tij≤productioni
lingo 建模
集合
赋值
目标条件
约束条件
完整代码
MODEL:
SETS:
MACHINE/A B C D/: ABILITY;
PRODUCTION/P Q/:PROFIT,X;
LINK(MACHINE,PRODUCTION): T;
ENDSETS
DATA:
ABILITY = 12 8 16 12;
PROFIT = 2 3;
T =
2 1 4 0
2 2 0 4;
ENDDATA
MAX = @SUM(PRODUCTION(J):X(J) * PROFIT(J));
@FOR(MACHINE(I):@SUM(PRODUCTION(J):T(I,J) * X(J)) <= ABILITY(I));
END