2018年第七届数学建模国际赛小美赛A题空中加油飞行计划解题全过程文档及程序

news2024/11/26 17:50:19

2018年第七届数学建模国际赛小美赛

A题 空中加油飞行计划

原题再现:

  太平洋中部一个小岛上的居民被自然灾害困住。救援人员需要派遣一架轻型飞机运送少量急救药品到岛上,并运送一名重伤者到医疗基地求救。岛上有一个无人值守的简易机场,可以使用,但没有飞机或燃料储备。飞机从距离该岛615海里的基地起飞。在正常载荷条件下,飞机最大航程为680海里。为了返回,我们必须进行空中加油。
  这种飞机能够在空中接收油。经过简单的改装,同一型号的飞机可以完成合作伙伴空中加油的任务,即将自己的燃油分配给合作伙伴。该类型飞机的最大燃油容量为155kg。空中加油设备安装后,最大载油量增加至170kg,其他载油量无法承载。基地拥有一支机队和足够的装备,可以在短时间内改装成油轮。

  问题:
  1、请设计可行的空中加油方案,使救援人员能够完成任务。
  2、空中加油属于高风险作业,有失败的可能。运输和加油飞机也有发生故障的概率。请考虑工程各部分的失败概率。当我们需要保证总成功率时,请给出相应的最优解决方案。

整体求解过程概述(摘要)

  在特定情况下,救援人员需要派遣轻型飞机将伤员从岛上运送到医疗基地进行救援。在本文中,我们设计了一个可行的空中加油方案,使救援人员能够完成任务,然后考虑失败的概率,得到一个最优解。
  首先,我们假设往返途中分别有m个加油点和n个加油点,每个加油点允许一个加油机为飞机加油。在救援成功的前提下,引入决策变量0和1来确定需要加油的点。确保剩余油足以支持飞机在最后一次加油后到达下一个加油点并安全返回基地,其油量不得超过最大容量。此外,我们考虑为油轮和飞机留下少量的安全油。以油船总油耗最小为目标函数,建立了混合整数非线性规划模型。利用Lingo软件,采用分枝定界法对模型进行求解。最后得出合理的加油方案:配备4艘加油船,2艘加油船分别在离岛90海里和270海里加油20.51471kg和40.58824kg;另外两艘加油船分别在距基地310海里和200海里处加油23.67647kg和45.58824kg。
  为了改进我们的模型,我们考虑了爬升、平层和着陆三个阶段的不同石油消耗比例。在加油过程中设置了一个恒定的距离,并尝试了三级距离和油耗比的不同参数组。通过敏感性分析发现,我国主要需要4艘油船,总油耗在467kg~555kg之间,说明了模型和加油方案的可行性。具体程序如表2和图4所示。
  其次,将换料过程分为交会、对接、换料和解体四个阶段。我们考虑前三个阶段的不同情况,其中有相应的失效概率。本文建立了以成功率最大、总油耗最小为目标函数的双目标规划模型。然后选择遗传算法对规划模型进行求解,分别以总成功率为85%和90%为一个成功任务。最后选取八组三阶段失效概率在相应情况下进行灵敏度分析。表3和表4的结果表明,该方案合理可行。
  由于故障事件的增加将导致空中加油的不确定性,因此需要更多的加油机来确保较高的成功率。在相同的事件概率下,较高的成功率阈值迫使我们派遣更多的油轮。保证更高的成功率,成功率越低,我们为更省油的目的派出的飞机就越少。

模型假设:

  1、为了简化我们的模型,不考虑轻型飞机和油轮的起飞时间,假设油轮和飞机是同步的,这样就可以在需要的时候立即接收燃油。

  2、不考虑油轮向其他油轮供油的情况。

  3、每辆加油车完成一次加油任务后返回。

  4、不考虑天气等外部环境因素的影响

  5、救援人员和加油人员经过严格的飞行训练,确保飞行安全。

问题重述:

  问题背景

  太平洋中部一个小岛上的居民被自然灾害困住。救援人员需要派遣一架轻型飞机运送少量急救药品到岛上,并运送一名重伤者到医疗基地求救。飞机从距离该岛615海里的基地起飞。在正常载荷条件下,飞机最大航程为680海里。为了返回,我们必须进行空中加油。
  这种飞机能够在空中接收油。经过简单的改装,同一型号的飞机可以完成合作伙伴空中加油的任务,即将自己的燃油分配给合作伙伴。该类型飞机的最大燃油容量为155kg。空中加油设备安装后,最大油量增加至170kg。基地拥有一支机队和足够的装备,可以在短时间内改装成油轮。

  问题重述

  1、设计可行的空中加油方案,使救援人员能够完成任务。
  2、空中加油属于高风险作业,有失败的可能。运输和加油飞机也有发生故障的概率。考虑到各部分工作的失效概率,需要保证总成功率和相应的最优解。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

c=0.2279411764705;
Xg0=0;
Yg0=155;
Xb0=615;
Yb0=0;
Rg0=0;
n=38;
enddata
sets:
gg/1..n/:g_use,Xg,Yg,Tg,costg;
bb/1..n/:b_use,Xb,Yb,Tb,costb;
Rgg/1..n/:Rg;
Rbb/1..n/:Rb;
Endsets
min=(@Sum(gg(i):costg(i))+@Sum(bb(i):costb(i)));
@for(gg(i):@Bin(g_use(i));Xg(i)=i*380/n);
@for(bb(i):@Bin(b_use(i));Xb(i)=380-(i-1)*380/n);
@for(gg(i):costg(i)=2*c*g_use(i)*Xg(i)+g_use(i)*Yg(i);@BND(0,Yg(i),165);@BND(0,cost
g(i),165)); 
@for(bb(i):costb(i)=2*c*b_use(i)*Xb(i)+b_use(i)*Yb(i);@BND(0,Yb(i),165);@BND(0,cost
b(i),165)); 
@for(Rgg(i):Rg(i)=@IF(i#eq#1,Rg0+Yg0-c*(Xg(i)-Xg0),Rg(i-1)+g_use(i-1)*Yg(i-1)-
c*(Xg(i)-Xg(i-1))); 
@for(gg(i):Tg(i)=Rg(i)+g_use(i)*Yg(i));@BND(0,Tg(i),155));
Rb0=Rg(n)+g_use(n)*Yg(n)-c*(615-Xg(n));
@for(Rbb(i):Rb(i)=@IF(i#eq#1,Rb0+Yb0-c*(Xb0-Xb(i)),Rb(i-1)+b_use(i-1)*Yb(i-1)-
c*(Xb(i-1)-Xb(i))); 
@for(bb(i):Tb(i)=Rb(i)+b_use(i)*Yb(i));@BND(0,Tb(i),155)); 
@for(gg(i):Rg(i)>=5);
@for(bb(i):Rb(i)>=5);
Rb0>=5;
Rb(n)+b_use(n)*Yb(n)-c*Xb(n)>=5;
x=20;
s1=0.15;
s3=0.15;
l1=50;
m1=5;
l3=50;
m2=5;
Xg0=0;
Yg0=155;
Xb0=615;
n=38;
enddata
sets:
start/1..m1/;
load/1..m2/;
gg/1..n/:g_use,Xg,Yg,Tg,costg;
bb/1..n/:b_use,Xb,Yb,Tb,costb;
Rgg/1..n/:Rg;
Rbb/1..n/:Rb;
endsets
!min=@Sum(gg(i):g_use(i))+@Sum(bb(i):b_use(i));
min=(@Sum(gg(i):costg(i))+@Sum(bb(i):costb(i)));
s2=1-s1-s3;
l2=615-l1-l3;
c=155*s2/(680-l1-l3);
@for(gg(i):@Bin(g_use(i));Xg(i)=i*380/n);
@for(bb(i):@Bin(b_use(i));Xb(i)=380-(i-1)*380/n);
@for(start(i):g_use(i)=0);
@for(load(i):b_use(n-i+1)=0);
@for(gg(i):costg(i)=g_use(i)*170*(s1+s3)+c*g_use(i)*(2*Xg(i)+2*x-l1-
l3)+g_use(i)*Yg(i);@BND(0,Yg(i),165);@BND(0,costg(i),165)); 
@for(bb(i):costb(i)=b_use(i)*170*(s1+s3)+c*b_use(i)*(2*Xb(i)-l1-
l3)+b_use(i)*Yb(i);@BND(0,Yb(i),165);@BND(0,costb(i),165)); 
@for(Rgg(i):Rg(i)=@IF(i#eq#1,Yg0-Yg0*s1-c*(Xg(i)-Xg0-l1),Rg(i-1)+g_use(i-1)*Yg(i-1)-
c*(Xg(i)-Xg(i-1)))); 
@for(gg(i):Tg(i)=Rg(i)+g_use(i)*Yg(i)-c*x;@BND(0,Tg(i),155));
Rb0=Rg(n)+g_use(n)*Yg(n)-c*(615-Xg(n));
@for(Rbb(i):Rb(i)=@IF(i#eq#1,Rb0-155*s1-c*(Xb0-l1-Xb(i)),Rb(i-1)+b_use(i-1)*Yb(i-1)-
c*(Xb(i-1)-Xb(i)))); 
@for(bb(i):Tb(i)=Rb(i)+b_use(i)*Yb(i)-c*x;@BND(0,Tb(i),155)); 
@for(Rgg(i):Rg(i)>=5);
@for(Rbb(i):Rb(i)>=5);
Rb0>=5;
Rb(n)+b_use(n)*Yb(n)-c*Xb(n)-155*s3>=5;
END
clc,clear
tic;
pop_size = 200; % population size
pop_len = 71;
gnmax = 300; % maximum number of generations
pc = 0.8; %crossover probability 
pm = 0.1; %mutation probability
% The formation of an initial population
s = zeros(pop_size,pop_len);
for i=1:pop_size
 tmp = rand(1,pop_len);
 tmp(tmp>0.3)=1;
 tmp(tmp<=0.3)=0;
 s(i,:) = tmp;
end
% Calculate fitness function
[~,p] = objf(s);
gn = 1; %The current algebra.
ymean = zeros(gn,1);
ymin = zeros(gn,1);
xmin = zeros(pop_size,pop_len);
scnew = zeros(pop_size,pop_len); %Store crossover populations
smnew = zeros(pop_size,pop_len); %Store the mutant population
while gn<gnmax+1
 for j=1:2:pop_size
 seln=sel(p); %select
 scro=cro(s,seln,pc); 
 scnew(j,:)=scro(1,:);
 scnew(j+1,:)=scro(2,:);
 smnew(j,:)=mut(scnew(j,:),pm); 
 smnew(j+1,:)=mut(scnew(j+1,:),pm);
 end
 s = smnew; % New populations have emerged
 [f,p] = objf(s); % Calculate the fitness of the new population
 % Optimal fitness and optimal individual location
 [fmin,nmin] = min(f);
 % Average fitness and optimal fitness were recorded
 ymean(gn) = mean(f);
 ymin(gn) = fmin;
 % Record the best individuals of the current generation
 x = s(nmin,:);
xmin(gn,:) = x;
 gn = gn+1;
end
% Remove maximum points from the image
max_ymin = 0;
for i=1:length(ymin)
 if ymin(i) ~= 9999999
 if max_ymin < ymin(i)
 max_ymin = ymin(i);
 end
 end
end
for i=1:length(ymin)
 if ymin(i) == 9999999
 ymin(i) = max_ymin;
 end
end
[min_ymin,index] = min(ymin);
best_ym = ymin(index);
best_x = xmin(index,:);
figure(1);
plot(ymin,'r'); hold on;grid;
title('search process');
xlabel('The number of iterations');
ylabel('Refuel')
legend('Optimal solution');
fprintf('Refuel:%d
\n',min_ymin);
fprintf('best_x:');
disp(best_x);
toc; %------------------------------------------------
%The fitness of all populations was calculated
function [f,p]=objf(s)
 inn=size(s,1); %Read the population size
 f=zeros(inn,1);
 for i=1:inn
 f(i)=fitness(s(i,:)); %Calculate fitness
 end
 tmp = f;
 f=(1000./f)'; %Take the bottom
 % Get the wheel
 fsum=0;
for i=1:inn
 fsum=fsum+f(i)^15;
 end
 ps=zeros(inn,1);
 for i=1:inn
 ps(i)=f(i)^15/fsum;
 end
 %Calculate the cumulative probability
 p=zeros(inn,1);
 p(1)=ps(1);
 for i=2:inn
 p(i)=p(i-1)+ps(i);
 end
 p=p';
 f = tmp;
end
%--------------------------------------------------
%Determine the probability
function pcc=pro(pc)
test(1:100)=0;
p=round(100*pc);
test(1:p)=1;
n=round(rand*99)+1;
pcc=test(n); 
end
%--------------------------------------------------
%Select operation
function seln=sel(p)
seln=zeros(2,1);
%Choose two individuals from a population
%preferably not the same individual twice
for i=1:2
 r=rand; 
 prand=p-r;
 j=1;
 while prand(j)<0
 j=j+1;
 end
 seln(i)=j; 
 if i==2&&j==seln(i-1) %If they're the same, I'm going to do it again
r=rand; 
 prand=p-r;
 j=1;
 while prand(j)<0
 j=j+1;
 end
 end
end
end
%------------------------------------------------
%Crossover operations
function scro=cro(s,seln,pc)
bn=size(s,2);
pcc=pro(pc); 
scro(1,:)=s(seln(1),:);
scro(2,:)=s(seln(2),:);
if pcc==1
 c1 = round(rand*(bn-2))+1; 
 c2 = round(rand*(bn-2))+1;
 chb1 = min(c1,c2);
 chb2 = max(c1,c2);
 middle = scro(1,chb1+1:chb2);
 scro(1,chb1+1:chb2) = scro(2,chb1+1:chb2);
 scro(2,chb1+1:chb2) = middle;
end
end
%--------------------------------------------------
%Mutation operation
function snnew=mut(snew,pm)
bn=size(snew,2);
snnew=snew;
pmm=pro(pm); 
if pmm==1
 for i=1:3
 c1=round(rand*(bn-2))+1;
 snnew(c1)=1-snnew(c1);
 end
end
end
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1320832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20231218在Ubuntu18.04下以EXT4格式化HDD

20231218在Ubuntu18.04下以EXT4格式化HDD 2023/12/18 17:24 缘起&#xff1a; 编译一个Android10大概要200GB&#xff0c;编译10个Android10的SDK&#xff0c;3TB的HDD机械硬盘就估计会被填满了&#xff01; 如果使用rm -rf *这个命令将SDK一个一个逐个地删除&#xff0c;估计2…

思幻二次元风格的工作室个人引导页源码

思幻工作室个人引导页源码已经完成开发&#xff01;该源码支持三端自适应&#xff0c;并且具备赞助功能。我们选择了当前点赞量最高的配色方案&#xff0c;打造了一个独特的二次元风格引导页。经过在美国服务器上进行的测试&#xff0c;效果令人满意&#xff0c;网页加载速度达…

WordPress主题 响应式个人博客主题Kratos源码

Kratos 是一款专注于用户阅读体验的响应式 WordPress 主题&#xff0c;整体布局简洁大方&#xff0c;针对资源加载进行了优化。 Kratos主题基于Bootstrap和Font Awesome的WordPress一个干净&#xff0c;简单且响应迅速的博客主题&#xff0c;Vtrois创建和维护&#xff0c; 主…

【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; X的平方根 class Soluti…

SVN小白常见操作流程

SVN小白常见操作流程 一、什么是Subversion&#xff1f;二、TortoiseSVN客户端安装教程三、SVN 操作3.1 SVN Ckeckout(检出)3.2 Add(新增文件)3.3 SVN Commit(提交)3.4 SVN Update(更新操作)3.5SVN Delete(删除操作)3.6 SVN Revert to a revision(版本回溯)3.7 不同版本内容之间…

P2P网络下分布式文件共享场景的测试

P2P网络介绍 P2P是Peer-to-Peer的缩写&#xff0c;“Peer”在英语里有“对等者、伙伴、对端”的意义。因此&#xff0c;从字面意思来看&#xff0c;P2P可以理解为对等网络。国内一些媒体将P2P翻译成“点对点”或者“端对端”&#xff0c;学术界则统一称为对等网络(Peer-to-Pee…

阿里云|人工智能(AI)技术解决方案

函数计算部署Stable Diffusion AI绘画技术解决方案 通过函数计算快速部署Stable Diffusion模型为用户提供快速通过文字生成图片的能力。该方案通过函数计算快速搭建了AIGC的能力&#xff0c;无需管理服务器等基础设施&#xff0c;专注模型的能力即可。该方案具有高效免运维、弹…

美颜SDK是什么?视频美颜SDK在直播平台中的集成与接入教程详解

当下&#xff0c;主播们追求更加自然、精致的外观&#xff0c;而观众也期待在屏幕前欣赏到更为清晰、美丽的画面。为了满足这一需求&#xff0c;美颜SDK应运而生&#xff0c;成为直播平台的重要利器之一。 一、什么是美颜SDK&#xff1f; 通过美颜SDK&#xff0c;开发者可以…

【Proteus仿真】【Arduino单片机】定时智能插座开关

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使LCD1602液晶&#xff0c;DS18B20温度传感器、按键、蜂鸣器、继电器开关、HC05蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD16…

如何让32位.Net 应用打开3G开关

昨天刚分享了《如何让.NET应用使用更大的内存》&#xff0c;结果就有同学说&#xff0c;<最好加一下32位如何开启大内存&#xff0c;因为很多传统项目32位&#xff0c;实在迁移不动了>&#xff0c;那么&#xff0c;我就验证了一些可行的方案&#xff0c;发现都挺简单的。…

TCP/IP详解——FTP 协议,Telnet协议

文章目录 1. FTP 协议1.1 FTP的应用1.2 FTP传输文件的过程1.3 FTP传输模式1.4 主动模式&#xff08;Active Mode&#xff09;1.5 Active Mode 抓包分析1.6 被动模式&#xff08;Passive Mode&#xff09;1.7 Passive Mode 抓包分析 2. Telnet 协议2.1 Telnet 概念2.2 Telnet 协…

我做了一个在手机灵动岛锁屏看实时网速/步数/下班倒计时/跑步距离/照片/待办/倒计时/手机使用次数/帧率...的软件

我做了一个在手机灵动岛&锁屏看实时网速/步数/下班倒计时/跑步距离/照片/待办/倒计时/手机使用次数/帧率…的软件 Island Widgets 的作用&#xff1a; 提醒您 &#xff1a; 准时下班每天运动陪伴家人保持体重放下手机每日待办当前网速手机使用强度实时热搜现在天气… 初…

使用openMVS库,在VS2022中启用c++17标准编译仍然报错

使用openMVS库&#xff0c;在VS2022中启用c17标准编译仍然报错 现象 项目中引用了某些开源库&#xff08;例如openmvs2.1.0&#xff09;&#xff0c;编译时要求启用编译器对c17的支持。 没问题&#xff01;大家都知道在下图所示的位置调整C语言标准&#xff1a; 但是&#…

Django 构建动态前端页面详解

概要 Django 是一个强大的 Python Web 框架&#xff0c;广泛用于后端开发。然而&#xff0c;它也支持直接使用 HTML, CSS, 和 JavaScript 来构建动态的前端界面。本文将详细介绍如何在 Django 项目中使用这些技术&#xff0c;包括设置静态文件、编写 HTML 模板以及集成 JavaSc…

预测性维护在汽车制造行业中的应用

汽车制造行业是一个高度复杂和精细化的领域&#xff0c;依赖于各种设备来完成生产流程。这些设备包括机械装配线、焊接机器人、喷涂设备、传送带等。然而&#xff0c;这些设备在长时间运行中不可避免地会遇到各种故障&#xff0c;给生产进程带来延误和成本增加。为了应对这一挑…

鸿蒙Js实战,计算器功能开发

场景&#xff1a; 通过动态设置按钮组件button实现计算器的键盘&#xff0c;通过文本text显示计算的表达书&#xff0c;可以计算&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;可以一个一个移除&#xff0c;可以重置 等。 下面我们开始今天的文章&#xff0c;还是老规…

快速构建自定义配置好的VM - 使用GCP instance-template 和 custom-image

在云项目开发中有时会有下面的需求&#xff1a; 构建大量拥有相同配置&#xff0c; 相同已安装软件&#xff0c; 甚至相同已启动进程的虚拟机。 下面的内容会基于1个简单的例子&#xff1a; 现有1台vm 名字是 tf-vpc0-subnet0-vm0 &#xff0c; 我在上面手动安装了jdk11 和 …

智能手表上的音频(五):录音

上篇讲了语音通话&#xff0c;本篇讲录音。录音功能就是把录到的音频保存成文件。保存文件的格式支持两种&#xff1a;一是PCM(16K采样)的WAV格式&#xff0c;二是AMR-NB&#xff08;8k采样&#xff09;的AMR格式。WAV格式简单&#xff1a;44字节的文件头PCM 数据&#xff0c;示…

flask 接口处理带有图片和json数据的请求 发送图片到前端的实现

1.flask的request 从flask的源码可以看到flask的可用属性很多&#xff0c;包括data,form,files&#xff0c;header,host等&#xff0c;在我们接收文件传参时需要用到的属性就是form和files。不过具体的使用方式有两种&#xff0c;即&#xff1a;postman发送的和requests模拟发…

〖大前端 - 基础入门三大核心之JS篇(57)〗- 继承

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;哈哥撩编程&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xff0c;目前在公司…