【数学建模】DVD在线租赁

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名称DVD1DVD2DVD3DVD4DVD5
愿意观看的人数200100502510

在这里插入图片描述

注:D001~D100表示100种DVD, C0001~C1000表示1000个会员, 会员的在线订单用数字1,2,…表示,数字越小表示会员的偏爱程度越高,数字0表示对应的DVD当前不在会员的在线订单中。
(注:表2数据位于文件B2005Table2.xls中)

question1

question1.1

建立租赁模型:
设有 x x x张DVD,想看会员数为两万,满足度为 50 % 50\% 50%
a % a\% a%个会员租赁两次, ( 1 − a ) % (1-a)\% (1a)%个会员租赁一次
可得: 2 ∗ x ∗ a % + x ∗ ( 1 − a ) % = 20000 ∗ 0.5 2*x*a\% + x*(1-a)\% = 20000 * 0.5 2xa%+x(1a)%=200000.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/1000100000
x = ⌈ ( b / 1000 ∗ 100000 ∗ w ) / ( 2 ∗ a % + ( 1 − a % ) ) ⌉ x = \lceil(b/1000*100000 * w)/(2*a\% + (1-a\%))\rceil x=⌈(b/1000100000w)/(2a%+(1a%))⌉

DVD名称DVD1DVD2DVD3DVD4DVD5
愿意观看的人数200100502510
需要准备张数625031251563782313

question1.2 如果要求保证在三个月内至少95%的会员能够看到该DVD呢?

以下模型建立在租两次的会员月初租赁,月末还 , 租一次的会员月初租,下月初还

建立会员重复模型:
设第 i i i个月来的会员数为 y i y_i yi个会员
每个月有 a % a\% a%个会员租赁两次, ( 1 − a ) % (1-a)\% (1a)%个会员租赁一次, 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%yjC%,a%yiC%)和是同一个会员
其中 min ⁡ ( ( 1 − a ) % y j ∗ C % , ( 1 − a ) % y i ∗ C % ) \min{((1-a)\%y_{j}*C\%,(1-a)\%y_{i}*C\%)} min((1a)%yjC%,(1a)%yiC%)和是同一个会员

引入question1.1的模型
设统计中愿意观看的人数为 b b b,满足度为 w w w,则想看会员数为 b / 1000 ∗ 100000 b/1000*100000 b/1000100000

设第 i i i个月有 x x x张DVD
a % a\% a%个会员租赁两次, ( 1 − a ) % (1-a)\% (1a)%个会员租赁一次
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 2xia%+xi(1a)%=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+y3min(a%y2C%,a%y1C%)min(a%y3C%,a%y2C%)min(a%y1C%,a%y3C%)min((1a)%y2C%,(1a)%y1C%)min((1a)%y3C%,(1a)%y2C%)min((1a)%y1C%,(1a)%y3C%)b/1000100000w2xia%+xi(1a)%=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={(11orderij),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=1in,1jmxijbij

要保证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 1inxij<=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 1jmxij=yi3,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 xijorderij,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方法
在这里插入图片描述

客户/DVD ID第一张第二张第三张
C0001D008D041D098
C0002D006D044D062
C0003D032D050D080
C0004D007D018D041
C0005D011D066D068
C0006D019D053D066
C0007D026D066D081
C0009D053D078D100
C0010D041D055D085
C0011D059D063D066
C0012D002D031D041
C0013D021D078D096
C0014D023D052D089
C0015D013D052D085
C0016D010D084D097
C0017D047D051D067
C0018D041D060D078
C0019D066D084D086
C0020D045D061D089
C0021D045D050D053
C0022D038D055D057
C0023D029D041D095
C0024D037D041D076
C0025D009D069D081
C0026D022D068D095
C0027D050D058D078
C0028D008D034D082
C0029D026D030D055
C0030D037D062D098

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={(11orderij),orderij>00,orderij=0maxans=1in,1jmxijbij1inxij<=sumj,j=1,2,3....,m1jmxij=yi3,i=1,2,3,..nxijorderij,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} 1jmsumj=numsum

要使一个月内95%的会员得到他想看的DVD,按照第二问的限制下即发三张DVD就是满足该客户,否则不满足
∑ 1 ≤ i ≤ n y i ≥ n ∗ 95 % \sum_{1\le i \le n}y_i\ge n * 95\% 1inyin95%

再加上要使一个月内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\% 1in(1jm(orderij!=0)=1jmxij(orderij!=0))n95%

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)));
  • 23
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值