【数学建模】DVD在线租赁

devtools/2024/12/22 18:03:55/

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
    • question1.2 如果要求保证在三个月内至少95%的会员能够看到该DVD呢?
  • question2
  • question3

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求解:

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求解:

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)));

http://www.ppmy.cn/devtools/25500.html

相关文章

牛客NC195 二叉树的直径【simple DFS C++ / Java /Go/ PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/15f977cedc5a4ffa8f03a3433d18650d 思路 最长路径有两种情况&#xff1a; 1.最长条路径经过根节点&#xff0c;那么只需要找出根节点的左右两棵子树的最大深度然后相加即可。 2.最长路径没有经过根节点&#xf…

图论单源最短路径——spfa

【模板】单源最短路径&#xff08;弱化版&#xff09; 本题用的spfa 题目背景 本题测试数据为随机数据&#xff0c;在考试中可能会出现构造数据让SPFA不通过&#xff0c;如有需要请移步 P4779。 题目描述 如题&#xff0c;给出一个有向图&#xff0c;请输出从某一点出发到…

005 延时交换机

文章目录 延时交换机插件的安装PluginsDelayConfigProducer.javaConsumer.javaapplication.yaml RabbitMQ中既有延时队列的概念&#xff0c;也有延时交换机的概念&#xff0c;但两者在实现机制上有所不同。以下是关于这两者的详细解释&#xff1a; 延时队列&#xff1a; 延时队…

mac资源库的东西可以删除吗?提升Mac运行速度秘籍 Mac实用软件

很多小伙伴在使用mac电脑处理工作的时候&#xff0c;就会很疑惑&#xff0c;电脑的运行速度怎么越来越慢&#xff0c;就想着通过删除mac资源库的东西&#xff0c;那么mac资源库的东西可以删除吗&#xff1f;删除了会不会造成电脑故障呢&#xff1f; 首先&#xff0c;mac资源库…

记录不熟悉的函数用法(C++)——assign

1. assign (仅顺序容器) 记录起因&#xff1a;不知道一个vector给另一个vector在不是初始化时是如何赋值的&#xff0c;于是翻看《C Primer》&#xff0c;在“标准库类型vector”这一节中&#xff0c;并没有得到解答。于是&#xff0c;上网搜索&#xff0c;搜到一篇&#xff0…

学习指导|在改变

备忘在这里啦。潦草本草

最新游戏陪玩语音聊天系统3.0商业升级独立版本源码+搭建教程

首发价值29800元的最新商业版游戏陪玩语音聊天系统3.0商业升级独立版本源码。 下 载 地 址 &#xff1a; runruncode.com/php/19748.html 1. 新增人气店员轮播功能。 2. UI界面优化&#xff0c;包括游戏图标展示和分类展示的改进。 3. 增加动态礼物打赏功能。 4. 新增礼…

antd 日期控件RangePicker如何增加快捷键(日/周/月/年)

注意&#xff1a;快捷键是从当前日期往前推算的 效果 代码 <script><RangePickerranges{{日: [moment(new Date().setDate(new Date().getDate() - 1)), moment(new Date())],周: [moment(new Date().setDate(new Date().getDate() - 7)), moment(new Date())],月: […