关于DVD在线租赁问题的数学建模的研究家家.docx
- 文档编号:12021194
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:17
- 大小:82.58KB
关于DVD在线租赁问题的数学建模的研究家家.docx
《关于DVD在线租赁问题的数学建模的研究家家.docx》由会员分享,可在线阅读,更多相关《关于DVD在线租赁问题的数学建模的研究家家.docx(17页珍藏版)》请在冰豆网上搜索。
关于DVD在线租赁问题的数学建模的研究家家
关于DVD在线租赁问题的数学建模的研究
摘要本文考虑的是DVD在线租赁的问题,我们从历史统计数据出发把会员分为两类,A类:
(占60%)一个月内可以租碟两次,B类:
(占40%)一个月内只可以租碟一次。
基本假设出发,第一问我们根据实际情况以及基本假设,A类:
一个月内第一次租碟看了半个月就还回来,可以提供本月下一次再出租,B类:
租一次就看了一个月这个,我们通过推理的出了满足假设的结果,其结果基本上是合理的,第二问我们可以把它归结为(0,1)整数规划,把会员的满意度作为目标函数进行决策,首先我们把代表会员偏爱程度用层次分析的方法(即通过取倒数的方法)转化为顾客满意程度,由于我们建立的模型是一个(0,1)整数规划的模型,它是一个NP-难的问题,基于问题复杂性,我们只能提供贪婪算法这种启发式算法,通过逐步寻优得出一个近似解后,我们再对解进行改进,使之得到更具实际意义的解,第三问也可以把它归结为(0,1)整数规划,我们首先确定1000个会员中A类会员与B类会员,我们的作法是在(1-1000)中随机产生600数我们令会员编号属于这600个数是属于A类的,其余的属于B类。
然后初步确定每种DVD数量,我们开始取的DVD总的数量为应该有的下界(即3*950=2850),则第j种DVD的数量为:
然后与第二问类似的算法的出初始解,然后对解进行进一步优化与改进,使满足95%的会员在一个月内能够看到他想看到的DVD。
最后我们提及了模型的改进以及算法的改进建议。
关键字整数规划贪婪算法满意度 在线租碟
一﹑问题的重述及研究背景
随着信息时代的到来,网络成为人们生活中越来越不可或缺的元素之一。
许多网站利用其强大的资源和知名度,面向其会员群提供日益专业化和便捷化的服务。
例如,教育资源的光盘制品在线租赁就是一种可行的服务。
这项服务充分发挥了网络的诸多优势,包括传播范围广泛、直达核心消费群、强烈的互动性、感官性强、成本相对低廉等,为顾客提供更为周到的服务。
在为顾客提供方便的同时,为了追求利润的最大化,租赁服务将面临以下决策问题:
1.在知道愿意观看的顾客的数量的情况下,如何对准备DVD的数量,使愿意观看的人数达到某种程度?
2.在知道每个顾客的定单、偏爱程度以及现有的DVD的数量的情况下,如何分配才能使会员获得最大的满意度?
3.在知道顾客的定单、偏爱的程度的情况下,如何决定DVD的购买量以及分配,使满足一定的顾客得到他想要的情况下使满意度最大
4.如何预测顾客的需求,使准备的DVD利用率最高以及使顾客的满意度最大。
以上问题的解决将使在线租赁服务的决策者对需求、购买量、分配进行决策使顾客的满意度以及服务的利润最大。
二﹑问题假设
(1)每个会员每个月租赁次数不得超过2次,每次获得3张DVD会员看完3张DVD之后,需将DVD寄回,才可以继续下次租赁。
(2)每个会员所租的DVD都是不同种类的。
(3)在所有的会员中有60%的租一次看了半个月就还回来,可以提供本月下一次再出租,而40%租一次就看了一个月。
(4)假设月初和月中两次发货,租出去的DVD月末全部收回。
(5)DVD在邮寄和使用时不会被弄坏。
三﹑符号说明
四.模型的建立与求解
4.1第一问分析假设与求解
基本假设:
5张不同种类的
假设不愿意观看DVD1的会员不会租看DVD1。
假设准备x1张DVD1,。
。
。
,x5张DVD5。
对于DVD1来说,根据历史数据显示,有200个人想看,其中有60%的人(A类)租一次看了半个月就还回来,可以提供本月下一次再出租,40%的人(B类)租一次就看了一个月。
其中每次租赁遇到A类的人的概率为0.6。
为了满足题设的要求:
至少准备多少张DVD(i)。
所以应该尽力提高每张DVD(i)的利用率。
我们将A类准备租同一种DVD的会员分成均等的两批,分上下两个半月来观看那种DVD,上半月DVD(i)全部租出去:
租给1/2A类人和全部B类人:
下半月DVD(i)租给另外的1/2A类人。
这时人均使用DVD张数减少,即为(0.6/2+0.4=0.7),这是我们人为完全可以实现的,操控的。
这是我们减少同种DVD库存数量的一种行之有效的方法,由此很容易想到可以通过以A类人为对象来实现DVD的利用率达到更高,可以假设:
比如租借DVD1的人全是A类人,此时可通过上述方法使人均使用DVD张数减少到(1/2=0.5),但是这只是理想的情况,实际中是不可能存在的,是违背概率规律的。
是我们人为不可能通过操控实现,达到的。
愿意观看DVD(i)的人数=会员总数×抽样中愿意观看DVD(i)的人数/抽样总人数i=1,2,3,4,5
(1)需要准备的DVD(i)的张数=愿意观看DVD(i)的人数×50%×0.7
将已知数据代入上面的式子算得:
X1
X2
X3
X4
X5
7000
3500
1750
875
350
(根据实际情况,若出现小数则取整再加1)
(2)需要准备的DVD(i)的张数=愿意观看DVD(i)的人数×95%÷3×0.7
将已知数据代入上面的式子算得:
X1
X2
X3
X4
X5
4434
2217
1109
555
222
(根据实际情况,若出现小数则取整再加1)
4.2第二问的模型与算法
4.2.1问题的假设与分析
问题要求我们只处理当前的1000位会员的在线定单,因而我们只考虑当前满足一次的情况,即给每一个会员的DVD不超过3张也就是说每个会员的DVD数只能是0或者3,要使会员的满意度最大,由于问题给出的是反映偏爱程度的数字,而且数字越小偏爱程度越高。
显然满足了偏爱程度高其满意程度就高,因而我们可以用数组数字的倒数来刻画满意程度的高低,如表:
偏爱程度
1
2
3
4
5
6
7
8
9
10
满意程度
1
即若满足了偏爱程度为2的,则其满意程度为
,如果不在会员的定单中,则其满意度为0,这样刻画满意度在事实上是比较合理的。
4.2.2问题的模型
(0)
(1)
(2)
其中:
为第
个客户对第
个客户的满意程度。
为第
种碟的数量
(1)式为目标函数,约束
(1)表示每个人分到的DVD只能是3或者是0,约
束
(2)表示的是分第分给会员的DVD的数量不能超过该DVD的数量。
4.2.3模型的算法:
由于数据过于庞大,我们在此提供一个贪婪算法,贪婪算法是一种逐步寻优的方法,它虽然是一种近似算法,但是用它可以快速的解决较大规模的问题。
具体步骤如下:
Step0:
首先我们要求满足第一列满意程度高的,直到所有的该碟分配完或所有有定单的客户得到满足,k=2.
Step1:
考察第k列,先满足满意程度高的(如果满足约束条件),不满足约束条件则考虑满足约束条件满意程度次之的。
依次类推直到所有的碟分配完,或已经满足有定单的会员。
Step2:
k++,转Step1,直到k=100。
Step3:
解的改进:
用上面的算法得到的解有可能使某个会员得到的DVD数少于3张,因而必须对所求的解进行改进,我们的做法是把小于3张的取出来在进行同列再分配使尽量满足其他小于3张的会员使其达到3张,如果不能再分配则与同列比他的满意度低的相交换。
然后该会员的DVD数变为0。
4.2.3数值结果及分析
我们通过Matlab编程计算可以得到前30位的客户所分配到的DVD种类为:
成员编号
需求1
需求2
需求3
成员编号
需求1
需求2
需求3
C0001
D008
D082
D098
C0016
D084
D097
D006
C0002
D006
D044
D005
C0017
D047
D051
D067
C0003
D004
D50
D080
C0018
D041
D060
D078
C0004
D007
D018
D041
C0019
D066
D084
D086
C0005
D011
D066
D068
C0020
D089
D061
D045
C0006
D016
D019
D053
C0021
D045
D053
D002
C0007
D008
D026
D081
C0022
D038
D055
D057
C0008
D015
D0071
D099
C0023
D029
D081
D095
C0009
D053
D028
D100
C0024
D037
D041
D076
C0010
D055
D060
D085
C0025
D037
D041
D081
C0011
D019
D059
D063
C0026
D009
D069
D081
C0012
D002
D007
D031
C0027
D022
D050
D058
C0013
D021
D078
D096
C0028
D082
D034
D008
C0014
D052
D023
D046
C0029
D055
D030
D044
C0015
无
无
无
C0030
D037
D062
C098
从上表结合在线定单表我们可以看到其中大部分都会满足满意度最高的三个,这主要是因为DVD的总数量超过了3000张达到3007张,从理论上讲应该大部分满足满足最高的三个,从表中我们还可以看到编号为C0015会员没有分到DVD,这是因为从在线定单表中可以看出编号为D037的DVD的数量为106张,而其定单数只为91个因而有15张D037不能被分配,从而最多只有3007-15=2992被分配,所以将存在会员没有被分配。
4.3第三问的模型与算法
4.3.1问题的分析与假设
此问要求在一个月内满足95%的会员得到他想看的条件下使满意度最大,为此我们假设若某会员对某张DVD有定单的话,那么该会员就想看这张碟,从表中我们可以看到:
每一个会员发的定单数都超过了六张,而每个会员所能租的DVD不会超过六张,因而我们不可能满足其所有想看的DVD,所以我们假设当一个会员得到他所想要的一部分,就说他得到他想看的DVD,即我们只要给某个会员分三张或者六张DVD,则该会员得到了想看的。
4.3.2模型为:
(0)
(1)
(2)
(3)
(4)
其中:
、
的定义与的第二问相同,(0)为模型的目标函数表示的是使满意度最大,约束
(1)表示的是属于A类的会员分配到的DVD不能超过6张(即:
只可能为0,3,6),约束
(2)表示的是属于B类的会员分配到的DVD不能超过3张(即只可能是0,3),约束(3)表示DVD的数量至少应该使950个人得到3张DVD,约束(4)DVD的数量不可能超过分给950个会员每个会员6张DVD。
4.3.2模型的算法
首先:
确定那些会员是属于A类的,哪些会员是属于B类的,为此我们随机产生600个(1-1000)的数,我们令这600个数是属于A类的,其余的属于B类。
然后初步确定每种DVD数量,我们开始取的DVD总的数量为应该有的下界(即3*950=2850),则第j种DVD的数量为:
当所有的数据初始化之后,执行下列算法:
Step0:
首先我们要求满足第一列满意程度高的会员,若有属于
的,则其还回来的再分配给余下的满意度高的,直到所有的DVD被分配完或满足了所有有定单的会员,k=2.
Step1:
考察第k列先满足满意程度高的(如果满足约束条件),不满足约束条件则考虑满足约束条件满意程度次之的,若有属于
的会员,则其还回来的再分配给余下的满意度高的,直到所有的该种碟被分配完或满足有定单的会员。
Step2:
k++,转step1,直到k=100。
Step3:
对解进行改进与优化:
Step3.1检测会员得到他想看的DVD的人数(等于3和6人数)是否小于950,如果小于,则执行Step3.2,否则执行Step4。
Step3.2在已经分配到了DVD但还没有满足要求(A类为大于1小于3或大于3小于6)的会员中找到满意程度最高的会员,增加该会员所在列的DVD的数量。
执行Step3.1。
Step4得到解
得到数值结果:
DVD
购买量
1-10
39312929312939262534
11-20
27343034293316362525
21-30
38374226143634222425
3140
24232228302824252629
41-50
25171718172731172331
51-60
15412446162518241817
61-70
14173336232616202915
71-80
34311738143738221640
81-90
33364848284233244350
91-100
24333639415046263544
总数
2900
4.4值得研究的问题
在作需求预测时,我们应该考虑会员的增加和减少,也就是说我们在作DVD需求预测时我们不能只根据当前的定单以及满意程度来决定DVD的需求量还应该考虑会员在一定时期的变动情况,也就是说需求要分为固定的需求和一个随机的需求,此外还应该考虑DVD的损耗情况,从横向来看我们还应该考虑市场竞争这个因数,因为竞争直接影响到客户的数量。
购买的数量与预测的数量成一定的比例。
五﹑模型的优缺点及需要改进的地方
本文通过分析假设条件以及所要达到目标,分别建立两个整数规划模型对问
题进行求解,考虑到问题复杂性,我们提供了一个比较简单的算法-贪婪算法,
利用其逐步寻优的特点,可以非常快的得到一个近似解,然后我们通过改进所得到的解得到了相对较好的解,通过分析我们知道解基本是合理的。
值得进一步研究的问题:
本文由于数据量过于庞大,而且建立的模型是一个组合规划模型,所以我们不可能用精确算法对问题进行求解,因而我们建立了一种贪婪算法对问题进行求解,其计算出来的结果与精确结果可能有比较大出入,我们可以用其他的算法对问题进行求解还可以用其他的算法对问题的初始解进行改进,如:
我们可以用交换算法结合禁忌搜索算法对问题的初始解进行改进。
参考文献
[1]周义仓赫孝良编《数学建模实验》西安:
西安交通大学出版社,1999
[2]白其峥数学建模案例分析主编北京:
海洋出版社,2000
[3]吴翊,吴孟达,成礼智编著数学建模的理论与实践长沙:
国防科技大学出版社,1999
附录:
部分Matlab程序
[i,j]=find(a>0)
[ii,jj]=find(b>0)
[iii,jjj]=find(c>0)
[iiii,jjjj]=find(d>0)
[iiiii,jjjjj]=find(e>0)
%这里我们把原始数据分为5个连续的矩阵
fork=1:
1882,
i(1877+k)=ii(k)+200;
j(1877+k)=jj(k);
end
form=1:
1882,
i(1887+1882+m)=iii(m)+400;
j(1887+1882+m)=jjj(m);
end
forn=1:
1856,
i(1887+1882+1882+n)=iiii(n)+600;
j(1887+1882+1882+n)=jjjj(n);
end
forq=1:
1876,
i(1887+1882+1882+1856+q)=iiiii(q)+800;
j(1887+1882+1882+1856+q)=jjjjj(q);
end%此段程序的功能在于把原始数据中的大于0的元素的双下标用两个数i
%j来存放
forr=1:
100,
p=(find(j==r));
o=size(p);
t=o
(1)*o
(2);
fors=1:
t,
sit(150*(r-1)+s)=1000*(j(p(s))-1)+i(p(s));
va(150*(r-1)+s)=clv1(i(p(s)),j(p(s)),a,b,c,d,e);
end
end
%此段程序的功能是用两个数组sit、va来记录原始数据中大于0的元素的信息
%即以列来记录,该数组的一列中大于0的元素就为原始数组中所对应的一列其%中的大于0的元素,sit来存放该元素在原始数据中的单下标,va则是记录其 %值。
forr=1:
1000,
p=(find(i==r));
o=size(p);
t=o
(1)*o
(2)
fors=1:
t,
site(1000*(s-1)+r)=1000*(j(p(s))-1)+i(p(s));
val(1000*(s-1)+r)=clv1(i(p(s)),j(p(s)),a,b,c,d,e);
end
end
%此段程序的功能是用两个数组site、val来记录原始数据中大于0的元素的信%息,即以行来记录,该数组的一行中大于0的元素就为原始数组中所对应的一行%其中的大于0的元素,site来存放该元素在原始数据中的单下标,val则是记录%其值。
function[fla1,a_21]=fun(va,sit,a_2,a,b,c,d,e,fla,judge)
%该函数主要是将dvd分配给会员
%这里传递的参数a,b,c,d,e其实是就是将题目已知的十万个数据分成相等%的五个小矩阵
fori1=1:
100
fork1=1:
10
forj1=1:
150
ifmod(sit(150*(i1-1)+j1),1000)==0%这里是为了避免矩阵越界而做%的一些调整
t_1=1000;%t_1代表的是行数,sit()矩阵是%用来记录原始数据的位置,即成员编号和dvd种类
elseifmod(sit(150*(i1-1)+j1),1000)~=0
t_1=mod(sit(150*(i1-1)+j1),1000);
end
ifva(150*(i1-1)+j1)==k1&a_2(i1)>0&judge(t_1)==0,
%va矩阵则是记录对应的成员与dvd种类的喜好程度的值
%judge矩阵是判断是否已经为每一位成员分配好,它有0和1两%种值
i2=fix(sit(150*(i1-1)+j1)/1000)+1;%列数
ifmod(sit(150*(i1-1)+j1),1000)==0
i3=1000;
elseifmod(sit(150*(i1-1)+j1),1000)~=0
i3=mod(sit(150*(i1-1)+j1),1000);
end
i5=0;
fori4=1:
i2-1,
i6=clv1(i3,i4,a,b,c,d,e);
ifi6>0%如果改会员预定了该种dvd
i5=i5+1;
end
end
iffla(i3,i5+1)==0%fla()矩阵表示每个会员的所喜好dvd是否%已经分配,它有0和1两种值
a_2(i1)=a_2(i1)-1;%a_2是记录每种dvd的总张数的矩阵
a_21(i1)=a_2(i1);
fla(i3,i5+1)=1;%这里表示该会员得到其所需的一种DVDfla1(i3,i5+1)=1;
end
end%endifif
end%for
end%for
end%for
function[fla1,cnum,judge,a_21]=qiujie(fla1,judge,cnum,a_21,val,site)
%这个函数是用来回收已经分配了大于三张dvd的量
ak=[100,100,100,100,100,100,100,100,100,100]
%ak是用来记录所分到的dvd的喜好程度,值设为100是为了在排序时将%小值排在前列
fori=1:
1000,%cnum是用来记录每位会员在分配时所分配到的dvd的数量
fork=1:
10,
ifflag(i,k)==1,
cnum(i)=cnum(i)+1;
end
end
end
fori_1=1:
1000
ifcnum(i_1)==3
judge(i_1)=1
elseifcnum(i_1)>3%%%如果所分资源大于三就回收
judge(i_1)=1
fork=1:
10
iffla1(i_1,k)==1
ak(k)=val(i_1,k);
end%这里是解决如何将多余的资源回收
%为了保证每个会员的满意度最大,需要对他将要释放的多余资%源进行排序
end
forttt=1:
10,
fortt=2:
10,
ifak(tt) %%%% judge1=ak(tt-1); ak(tt-1)=ak(tt); ak(tt)=judge1; end end end fort=4: 10, ifak(t)<100 fortttt=1;10, ifak(t)==val(i_1,tttt),%val与va的功能一样,只是结构不同,%它们分别于site和sit的区别一样 iffix(site(i_1,tttt)/1000)==100; %site也是用来记录数据的原始地址,与sit不同的是sit是150×100 %的矩阵,而site是1000×10的矩阵 t1=100;%t1代表dvd的种别 elseiffix(site(i_1,tttt)/1000)~=100 t1=fix(site(i_1,tttt)/1000)+1; end fla1(i_1,tttt)=0; %fla1是在一次分配之后,接受到的参数,它和fla的功能是一样的 a_21(t1)=a_21(t1)+1;%回收的dvd end end end end cnum(i_1)=3; end end
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关于 DVD 在线 租赁 问题 数学 建模 研究 家家