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

问题目录

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

question2question3

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名称DVD1DVD2DVD3DVD4DVD5愿意观看的人数200100502510需要准备张数625031251563782313

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≤m​xij​∗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≤n​xij​<=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≤m​xij​=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方法

客户/DVD ID第一张第二张第三张C0001D008D041D098C0002D006D044D062C0003D032D050D080C0004D007D018D041C0005D011D066D068C0006D019D053D066C0007D026D066D081C0009D053D078D100C0010D041D055D085C0011D059D063D066C0012D002D031D041C0013D021D078D096C0014D023D052D089C0015D013D052D085C0016D010D084D097C0017D047D051D067C0018D041D060D078C0019D066D084D086C0020D045D061D089C0021D045D050D053C0022D038D055D057C0023D029D041D095C0024D037D041D076C0025D009D069D081C0026D022D068D095C0027D050D058D078C0028D008D034D082C0029D026D030D055C0030D037D062D098

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​=0​maxans=∑1≤i≤n,1≤j≤m​xij​∗bij​∑1≤i≤n​xij​<=sumj​,j=1,2,3....,m∑1≤j≤m​xij​=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≤m​sumj​=numsum​

要使一个月内95%的会员得到他想看的DVD,按照第二问的限制下即发三张DVD就是满足该客户,否则不满足

1

i

n

y

i

n

95

%

\sum_{1\le i \le n}y_i\ge n * 95\%

∑1≤i≤n​yi​≥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≤m​xij​∗(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)));

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: