首页 > 范文大全 > 正文

两辆铁路平板车的装货问题

开篇:润墨网以专业的文秘视角,为您筛选了一篇两辆铁路平板车的装货问题范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:铁路平板车如何装货是生活中常常会面对的问题。包装箱的宽和高是一样的,但是厚度及重量是不同的。因此装货方式不一样就会导致浪费空间不一样,使得运货成本也有很大差别。本文就如何装货的问题进行讨论,目标在于使得浪费的空间最小。

关键词:纯整数线性规划;Lingo;C;最优解

一、 问题重述

有七种规格的包装箱要装到两辆铁路平板车上去。包装箱的宽和高是一样的,但厚度(t,以厘米计)及重量(w,以公斤计)是不同的。下表给出了每种包装箱的厚度、重量以及数量。每辆平板车有10.2米长的地方可用来装包装箱(像面包片那样),载重为40吨。由于当地货运的限制,对C5,C6,C7类的包装箱的总数有一个特别的限制:这类箱子所占的空间(厚度)不能超过302.7cm。试把包装箱装到平板车上去使得浪费的空间最小。

t(cm) 48.7 52.0 61.3 72.0 48.7 52.0 64.0

w(kg) 2000 3000 1000 500 4000 2000 1000

件数 8 7 9 6 6 4 8

二、 模型假设

1、 假设包装箱之间不存在空隙

2、 假设包装箱排成一排不存在叠放等形式

3、 假设外界环境对包装箱不产生磨损等

三、 符号系统

t(i) 第i种包装箱的厚度

w(i) 第i种包装箱的载重

x(i) 第一辆车第i种包装箱的个数

y(i) 第二辆车第i种包装箱的个数

n(i) 第i种包装箱总个数

a(i) 第i种包装箱装载总个数

i=1,2,3,4,5,6

四、 模型建立

一、最小浪费空间计算

减少空间浪费存在的限制条件主要包括题目中提到的平板车的长度、载重量限度、包装箱自身的个数以及一些特殊限制。综合以上提及的限制条件,建立数学模型:Min=2040?

1020

1020

40

302.7

利用Llingo求得把包装箱装到平板车上去浪费的最小空间为0.6cm。

(程序及数据输出见附录1)

二、最优解中第七种包装箱的个数必定为0

题目中要求总占据空间不超过2040cm, 并且C5,C6,C7类所占空间不超过302.7cm,通过计算可知前四类若所有包装箱都装上恰好为最大装载空间1737.3cm。为了使浪费空间最小,因此前四类和后三类的装载空间都需达到限制范围内的最大值。下面对后三类包装箱所占空间的最大值。

利用C语言编程求解得最优解为302.1,且在x5=3,x6=3,x7=0的条件下,由此标题得证。(程序及数据输出见附录2)

五、 模型分析

Lingo分析只得出了一组分配方式,利用c编程得到所有满足最小浪费空间为0.6cm的分配方式共30组。(程序及数据输出见附录2)下面考虑实际生活中货车的安全问题,再次分别比较两辆货车在不同情况下的载重、浪费空间之差进行删选。载重和浪费空间差同时较小的分配方式更适合于生活中使用及本文讨论出的最优解。

六、 模型分析与推广

本文模型具有以下特点:

(1) 模型的建设基于文中所给各方面限制,思路较为严谨缜密。

(2) 本文采取lingo数学软件,优化方面功能强大,快捷方便;c语言编程设计适用性较广,灵活性较强。推广方面本文主要针对载重量这一元素进行讨论,在实际生活中将其他因素比如包装箱的装载方式(一排或可重叠)加以考虑讨论,这样使得模型更具有实际使用价值。

七、 参考文献

[1]赵静,数学建模与数学实验(第3版),北京,高等教育出版社,2008年。

[2]谭浩强,C程序设计(第三版),北京:清华大学出版社,

八、附录

附录1

Lingo编译过程如下:

model:

sets:

box/1..7/:t,w,k,a,b;

endsets

min=2040-@sum(box: (a+b)*t);

@sum(box(I):a(I)*t(I))

@sum(box(I):b(I)*t(I))

@sum(box(I):a(I)*w(I))

@sum(box(I):b(I)*w(I))

@for(box(I):a(I)+b(I)

@sum(box(I)|I #ge# 5:(a(I)+b(I))*t(I))

@for(box(I):@gin(a(I)));

@for(box(I):@gin(b(I)));

data:

t=48.7 52.0 61.3 72.0 48.7 52.0 64.0;

w=2 3 1 0.5 4 2 1;

k=8 7 9 6 6 4 8;

Enddata

附录2

C语言编程如下:

#include

#include

#include

void main()

{

FILE *fp1,*fp2;

double t[7]={48.7,52.0,61.3,72.0,48.7,52.0,64.0}; //每种包装箱的厚度t(单位:cm)

double w[7]={2,3,1,0.5,4,2,1},t1,t2,w1,w2; //每种包装箱的重量w(单位:t)

int cc[30][3]={0},p1[60][7]={0},p2[60][7]={0};

int a1,a2,a3,a4,a5,a6,a7,b1,b2,b3,b4,b5,b6,b7,i,j,nc,n;

fp1=fopen("pbc1.dat","w");

fp2=fopen("pbc2.dat","w");

nc=0;

n=0;

for(a5=0;a5

for(a6=0;a6

for(a7=0;a7

if(abs(48.7*a5+52.0*a6+64.0*a7-302.1)

{

cc[nc][0]=a5;

cc[nc][1]=a6;

cc[nc][2]=a7;

nc++;

}

printf("nc=%5d\n",nc);

for(i=0;i

{

for(j=0;j

printf("%5d",cc[i][j]);

printf("\n");

}

printf("\n");

//运算结果只有一种,即C5,C6,C7