2005高教社杯全国大学生数学建模竞赛题目B
随着信息时代的到来,网络成为人们生活中越来越不可或缺的元素之一。许多网站利用其强大的资源和知名度,面向其会员群提供日益专业化和便捷化的服务。例如,音像制品的在线租赁就是一种可行的服务。这项服务充分发挥了网络的诸多优势,包括传播范围广泛、直达核心消费群、强烈的互动性、感官性强、成本相对低廉等,为顾客提供更为周到的服务。
考虑如下的在线DVD租赁问题。顾客缴纳一定数量的月费成为会员,订购DVD租赁服务。会员对哪些DVD有兴趣,只要在线提交订单,网站就会通过快递的方式尽可能满足要求。会员提交的订单包括多张DVD,这些DVD是基于其偏爱程度排序的。网站会根据手头现有的DVD数量和会员的订单进行分发。每个会员每个月租赁次数不得超过2次,每次获得3张DVD。会员看完3张DVD之后,只需要将DVD放进网站提供的信封里寄回(邮费由网站承担),就可以继续下次租赁。请考虑以下问题:
1)网站正准备购买一些新的DVD,通过问卷调查1000个会员,得到了愿意观看这些DVD的人数(表1给出了其中5种DVD的数据)。此外,历史数据显示,60%的会员每月租赁DVD两次,而另外的40%只租一次。假设网站现有10万个会员,对表1中的每种DVD来说,应该至少准备多少张,才能保证希望看到该DVD的会员中至少50%在一个月内能够看到该DVD?如果要求保证在三个月内至少95%的会员能够看到该DVD呢?
2)表2中列出了网站手上100种DVD的现有张数和当前需要处理的1000位会员的在线订单(表2的数据格式示例如下表2),如何对这些DVD进行分配,才能使会员获得最大的满意度?请具体列出前30位会员(即C0001~C0030)分别获得哪些DVD。
3)继续考虑表2,并假设表2中DVD的现有数量全部为0。如果你是网站经营管理人员,你如何决定每种DVD的购买量,以及如何对这些DVD进行分配,才能使一个月内95%的会员得到他想看的DVD,并且满意度最大?
4)如果你是网站经营管理人员,你觉得在DVD的需求预测、购买和分配中还有哪些重要问题值得研究?请明确提出你的问题,并尝试建立相应的数学模型。
表1 对1000个会员调查的部分结果
DVD名称 | DVD1 | DVD2 | DVD3 | DVD4 | DVD5 |
---|---|---|---|---|---|
愿意观看的人数 | 200 | 100 | 50 | 25 | 10 |
注:D001~D100表示100种DVD, C0001~C1000表示1000个会员, 会员的在线订单用数字1,2,…表示,数字越小表示会员的偏爱程度越高,数字0表示对应的DVD当前不在会员的在线订单中。
(注:表2数据位于文件B2005Table2.xls中)
问题目录
- question1
- question1.1
- question1.2 如果要求保证在三个月内至少95%的会员能够看到该DVD呢?
- question2
- question3
question1
question1.1
建立租赁模型:
设有
x
x
x张DVD,想看会员数为两万,满足度为
50
%
50\%
50%
有
a
%
a\%
a%个会员租赁两次,
(
1
−
a
)
%
(1-a)\%
(1−a)%个会员租赁一次
可得:
2
∗
x
∗
a
%
+
x
∗
(
1
−
a
)
%
=
20000
∗
0.5
2*x*a\% + x*(1-a)\% = 20000 * 0.5
2∗x∗a%+x∗(1−a)%=20000∗0.5
根据题目可知
a
=
60
a = 60
a=60
解得
x
=
6250
x = 6250
x=6250
将模型一般化,设统计中愿意观看的人数为
b
b
b,满足度为
w
w
w,则想看会员数为
b
/
1000
∗
100000
b/1000*100000
b/1000∗100000
x
=
⌈
(
b
/
1000
∗
100000
∗
w
)
/
(
2
∗
a
%
+
(
1
−
a
%
)
)
⌉
x = \lceil(b/1000*100000 * w)/(2*a\% + (1-a\%))\rceil
x=⌈(b/1000∗100000∗w)/(2∗a%+(1−a%))⌉
DVD名称 | DVD1 | DVD2 | DVD3 | DVD4 | DVD5 |
---|---|---|---|---|---|
愿意观看的人数 | 200 | 100 | 50 | 25 | 10 |
需要准备张数 | 6250 | 3125 | 1563 | 782 | 313 |
question1.2 如果要求保证在三个月内至少95%的会员能够看到该DVD呢?
以下模型建立在租两次的会员月初租赁,月末还 , 租一次的会员月初租,下月初还
建立会员重复模型:
设第
i
i
i个月来的会员数为
y
i
y_i
yi个会员
每个月有
a
%
a\%
a%个会员租赁两次,
(
1
−
a
)
%
(1-a)\%
(1−a)%个会员租赁一次,
a
=
60
a = 60
a=60
设会员重复率为
C
%
C\%
C% ,
C
=
50
C=50
C=50
则其中
min
(
a
%
y
j
∗
C
%
,
a
%
y
i
∗
C
%
)
\min{(a\%y_{j}*C\%,a\%y_{i}*C\%)}
min(a%yj∗C%,a%yi∗C%)和是同一个会员
其中
min
(
(
1
−
a
)
%
y
j
∗
C
%
,
(
1
−
a
)
%
y
i
∗
C
%
)
\min{((1-a)\%y_{j}*C\%,(1-a)\%y_{i}*C\%)}
min((1−a)%yj∗C%,(1−a)%yi∗C%)和是同一个会员
引入question1.1的模型
设统计中愿意观看的人数为
b
b
b,满足度为
w
w
w,则想看会员数为
b
/
1000
∗
100000
b/1000*100000
b/1000∗100000
设第
i
i
i个月有
x
x
x张DVD
有
a
%
a\%
a%个会员租赁两次,
(
1
−
a
)
%
(1-a)\%
(1−a)%个会员租赁一次
第
i
i
i个月来的满足的会员数为
y
i
y_i
yi个会员
可得:
2
∗
x
i
∗
a
%
+
x
i
∗
(
1
−
a
)
%
=
y
i
2*x_i*a\% + x_i*(1-a)\%= y_i
2∗xi∗a%+xi∗(1−a)%=yi
来的会员总数减去重复会员数必须大于等于要满足的会员数
{
y
1
+
y
2
+
y
3
−
min
(
a
%
y
2
∗
C
%
,
a
%
y
1
∗
C
%
)
−
min
(
a
%
y
3
∗
C
%
,
a
%
y
2
∗
C
%
)
−
min
(
a
%
y
1
∗
C
%
,
a
%
y
3
∗
C
%
)
−
min
(
(
1
−
a
)
%
y
2
∗
C
%
,
(
1
−
a
)
%
y
1
∗
C
%
)
−
min
(
(
1
−
a
)
%
y
3
∗
C
%
,
(
1
−
a
)
%
y
2
∗
C
%
)
−
min
(
(
1
−
a
)
%
y
1
∗
C
%
,
(
1
−
a
)
%
y
3
∗
C
%
)
≥
b
/
1000
∗
100000
∗
w
2
∗
x
i
∗
a
%
+
x
i
∗
(
1
−
a
)
%
=
y
i
,
i
=
1
,
2
,
3
a
n
s
=
m
i
n
(
x
1
+
x
2
+
x
3
)
\begin{cases} y_1+y_2+y_3 - \min{(a\%y_{2}*C\%,a\%y_{1}*C\%)} - \min{(a\%y_{3}*C\%,a\%y_{2}*C\%)} - \min{(a\%y_{1}*C\%,a\%y_{3}*C\%)} - \min{((1-a)\%y_{2}*C\%,(1-a)\%y_{1}*C\%)} - \min{((1-a)\%y_{3}*C\%,(1-a)\%y_{2}*C\%)} - \min{((1-a)\%y_{1}*C\%,(1-a)\%y_{3}*C\%)} \ge b/1000*100000*w \\ 2*x_i*a\% + x_i*(1-a)\%= y_i , i = 1,2,3 \\ ans = min{(x_1+x_2+x_3)} \end{cases}
⎩
⎨
⎧y1+y2+y3−min(a%y2∗C%,a%y1∗C%)−min(a%y3∗C%,a%y2∗C%)−min(a%y1∗C%,a%y3∗C%)−min((1−a)%y2∗C%,(1−a)%y1∗C%)−min((1−a)%y3∗C%,(1−a)%y2∗C%)−min((1−a)%y1∗C%,(1−a)%y3∗C%)≥b/1000∗100000∗w2∗xi∗a%+xi∗(1−a)%=yi,i=1,2,3ans=min(x1+x2+x3)
question2
设变量
x
i
j
x_{ij}
xij为租赁给第
i
i
i个会员第
j
j
j种DVD的情况,设定
x
i
j
=
1
x_{ij}=1
xij=1为租,
x
i
j
=
0
x_{ij}=0
xij=0为不租
如果有
n
n
n个客户,
m
m
m种DVD,客户在线订单数为
o
r
d
e
r
i
j
order_{ij}
orderij
则单个会员满意量为
b
i
j
=
{
(
11
−
o
r
d
e
r
i
j
)
,
o
r
d
e
r
i
j
>
0
0
,
o
r
d
e
r
i
j
=
0
b_{ij} = \begin{cases} (11-order_{ij}) , order_{ij}>0 \\ 0,order_{ij}=0 \end{cases}
bij={(11−orderij),orderij>00,orderij=0
那么客户总满意度量:
max
a
n
s
=
∑
1
≤
i
≤
n
,
1
≤
j
≤
m
x
i
j
∗
b
i
j
\max ans = \sum_{1\le i \le n , 1\le j \le m}x_{ij} * b_{ij}
maxans=∑1≤i≤n,1≤j≤mxij∗bij
要保证DVD数量不能超标
设第
j
j
j种DVD有
s
u
m
j
sum_j
sumj个,题目已知
s
u
m
j
sum_j
sumj
∑
1
≤
i
≤
n
x
i
j
<
=
s
u
m
j
,
j
=
1
,
2
,
3....
,
m
\sum_{1\le i \le n}x_{ij}<=sum_j , j = 1,2,3....,m
∑1≤i≤nxij<=sumj,j=1,2,3....,m
每个客户发3张不同的DVD或者不发DVD:
设0/1变量
y
i
y_i
yi
∑
1
≤
j
≤
m
x
i
j
=
y
i
∗
3
,
i
=
1
,
2
,
3
,
.
.
n
\sum_{ 1\le j \le m}x_{ij} = y_i*3 ,i=1,2,3,..n
∑1≤j≤mxij=yi∗3,i=1,2,3,..n
需要保证每个人都不会收到自己不喜欢的DVD,即客户在线订单数为0时候,不可以租给他。
x
i
j
≤
o
r
d
e
r
i
j
,
i
=
1
,
2
,
3
,
.
.
n
,
j
=
1
,
2
,
3
,
.
.
m
x_{ij} \le order_{ij} ,i=1,2,3,..n , j= 1,2,3,..m
xij≤orderij,i=1,2,3,..n,j=1,2,3,..m
LINGO求解:
sets:
aa/1..1000/:y;
bb/1..100/:sum;
cc(aa,bb):order,x,b;
endsets
data:
order = @ole('D:\homewrok\建模\DVD租赁\B2005Table2.xls','order');
sum = @ole('D:\homewrok\建模\DVD租赁\B2005Table2.xls','dvdsumj');
enddata
@for(cc(i,j):b(i,j)=@if(order(i,j)#gt#0,11-order(i,j),0));
max=@sum(cc(i,j):x(i,j)*b(i,j));
@for(bb(j):@sum(aa(i):x(i,j))<=sum(j));
@for(aa(i):@sum(bb(j):x(i,j))=y(i)*3);
@for(cc(i,j):x(i,j)<=order(i,j));
@for(cc(i,j):@bin(x(i,j)));
@for(aa(i):@bin(y(i)));
注:LINGO读取EXCEL方法
question3
在满足第二问的模型下:注意: s u m j sum_j sumj是变量(未知)
{ b i j = { ( 11 − o r d e r i j ) , o r d e r i j > 0 0 , o r d e r i j = 0 max a n s = ∑ 1 ≤ i ≤ n , 1 ≤ j ≤ m x i j ∗ b i j ∑ 1 ≤ i ≤ n x i j < = s u m j , j = 1 , 2 , 3.... , m ∑ 1 ≤ j ≤ m x i j = y i ∗ 3 , i = 1 , 2 , 3 , . . n x i j ≤ o r d e r i j , i = 1 , 2 , 3 , . . n , j = 1 , 2 , 3 , . . m \begin{cases} b_{ij} = \begin{cases} (11-order_{ij}) , order_{ij}>0 \\ 0,order_{ij}=0 \end{cases}\\ \max ans = \sum_{1\le i \le n , 1\le j \le m}x_{ij} * b_{ij}\\ \sum_{1\le i \le n}x_{ij}<=sum_j , j = 1,2,3....,m\\ \sum_{ 1\le j \le m}x_{ij} = y_i*3 ,i=1,2,3,..n \\ x_{ij} \le order_{ij} ,i=1,2,3,..n , j= 1,2,3,..m \end{cases} ⎩ ⎨ ⎧bij={(11−orderij),orderij>00,orderij=0maxans=∑1≤i≤n,1≤j≤mxij∗bij∑1≤i≤nxij<=sumj,j=1,2,3....,m∑1≤j≤mxij=yi∗3,i=1,2,3,..nxij≤orderij,i=1,2,3,..n,j=1,2,3,..m
因为
s
u
m
j
sum_j
sumj是变量,我们决定每种DVD的购买量,需要满足DVD总量不变,设已知总量为
n
u
m
s
u
m
num_{sum}
numsum
∑
1
≤
j
≤
m
s
u
m
j
=
n
u
m
s
u
m
\sum_{1\le j \le m}sum_j = num_{sum}
∑1≤j≤msumj=numsum
要使一个月内95%的会员得到他想看的DVD,按照第二问的限制下即发三张DVD就是满足该客户,否则不满足
∑
1
≤
i
≤
n
y
i
≥
n
∗
95
%
\sum_{1\le i \le n}y_i\ge n * 95\%
∑1≤i≤nyi≥n∗95%
再加上要使一个月内95%的会员得到他想看的DVD(舍弃)
∑ 1 ≤ i ≤ n ( ∑ 1 ≤ j ≤ m ( o r d e r i j ! = 0 ) = ∑ 1 ≤ j ≤ m x i j ∗ ( o r d e r i j ! = 0 ) ) ≥ n ∗ 95 % \sum_{1\le i \le n}(\sum_{1\le j \le m} (order_{ij}!=0) = \sum_{1\le j \le m}x_{ij}*(order_{ij}!=0))\ge n*95\% ∑1≤i≤n(∑1≤j≤m(orderij!=0)=∑1≤j≤mxij∗(orderij!=0))≥n∗95%
LINGO求解:
sets:
aa/1..1000/:y;
bb/1..100/:sum,num;
cc(aa,bb):order,x,b;
endsets
data:
order = @ole('D:\homewrok\建模\DVD租赁\B2005Table2.xls','order');
num = @ole('D:\homewrok\建模\DVD租赁\B2005Table2.xls','dvdsumj');
enddata
@for(cc(i,j):b(i,j)=@if(order(i,j)#gt#0,11-order(i,j),0));
max=@sum(cc(i,j):x(i,j)*b(i,j));
@for(bb(j):@sum(aa(i):x(i,j))<=sum(j));
@for(aa(i):@sum(bb(j):x(i,j))=y(i)*3);
@for(cc(i,j):x(i,j)<=order(i,j));
@sum(bb(j):sum(j))=@sum(bb(j):num(j));
@sum(aa(i):y(i))>=950;
@for(cc(i,j):@bin(x(i,j)));
@for(aa(i):@bin(y(i)));