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

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名片即可

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

css+html横向滚动+固定宽

没什么好说的&#xff0c;快上代码&#xff01; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Do…

2023.12.16 帆软report 官方模板表练习,pymysql

import pymysql# 建立与数据库的连接 conn1 pymysql.connect(host192.168.88.100,port3306,userroot,password123456,dbshopnc_db ) conn2 pymysql.connect(host192.168.88.100,port3306,userroot,password123456,dbbi_db ) # 2.创建游标对象 c1 conn1.cursor() # 3.编写sql…

OpenSSL 3.2.0新增Argon2支持——防GPU暴力攻击

1. 引言 OpenSSL新发布的3.20版本中&#xff0c;引入了一些新特性&#xff0c;包括&#xff1a; post-quantum方法Brainpool曲线QUICArgon2&#xff1a;Argon2 是一种慢哈希函数&#xff0c;在 2015 年获得 Password Hashing Competition 冠军&#xff0c;利用大量内存计算抵…

【面试】Java最新面试题资深开发-微服务篇(1)

问题九&#xff1a;微服务 什么是微服务架构&#xff1f;它与单体架构相比有哪些优势和劣势&#xff1f;解释一下服务发现和服务注册是什么&#xff0c;它们在微服务中的作用是什么&#xff1f;什么是API网关&#xff08;API Gateway&#xff09;&#xff1f;在微服务中它有何…

[学习笔记]批量迁移数据库文件

拷贝数据库文件 首先在本地运行如下SQL语句&#xff0c;查看数据库文件的磁盘位置 SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files默认是保存在C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA目录下 首先复制数据…

mybatis.interceptor.exception.SqLValidateException:Ilegal SQL::......

现象&#xff1a;⬇️ 描述&#xff1a;执行 SQL 没问题&#xff0c;应用代码报错 ⬇️ .mybatis.interceptor.exception.SqLValidateException&#xff1a;Ilegal SQL::SELECT voucherNo FROM voucher ORDER BY CAST(SUBSTRING(voucherNo FROM LOCATE(_, voucherNo) 1) AS U…

C语言KR圣经笔记 4.4作用域规则 4.5头文件 4.6静态变量

4.4 作用域规则 构成一个 C 程序的函数以及外部变量&#xff0c;不需要全都同时编译&#xff1b;程序的源代码可以放在多个源文件中&#xff0c;并且之前编译好的例程可以从库里面加载。需要关心的问题有&#xff1a; 要怎么写声明&#xff0c;才能使变量在编译期间被正确声明…

网络编程『socket套接字 ‖ 简易UDP网络程序』

&#x1f52d;个人主页&#xff1a; 北 海 &#x1f6dc;所属专栏&#xff1a; Linux学习之旅、神奇的网络世界 &#x1f4bb;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f324;️前言&#x1f326;️正文1.预备知识1.1.IP地址1.2.端口号1.3.端口号与进…

三菱plc学习入门(一,认识三菱plc)

今天就开始对三菱的plc软件入一个门&#xff0c;希望小编的文章对读者和初学者有所帮助&#xff01;欢迎评论指正&#xff0c;废话不多说&#xff0c;下面开始学习。 目录 plc的型号介绍 M表示什么&#xff1f; T表示什么&#xff1f; R表示什么&#xff1f; 为什么三菱没…

Pytorch nn.Linear()的基本用法与原理详解及全连接层简介

主要引用参考&#xff1a; https://blog.csdn.net/zhaohongfei_358/article/details/122797190 https://blog.csdn.net/weixin_43135178/article/details/118735850 nn.Linear的基本定义 nn.Linear定义一个神经网络的线性层&#xff0c;方法签名如下&#xff1a; torch.nn.Li…

得帆信息创始人-张桐,受邀出席 BV百度风投AIGC主题论坛

近日&#xff0c;得帆信息创始人兼CEO张桐&#xff0c;作为百度风投被投代表企业创始人受邀出席“向未来&#xff0c;共成长” BV百度风投AIGC主题论坛。 与包括上海市徐汇区相关部门领导、百度集团相关事业部负责人及代表&#xff0c;以及来自国寿资本、中网投、麦顿投资的投资…

install cuda cudnn tersorRT

# 安装 $ ubuntu-drivers devices$ sudo apt-get install nvidia-driver-470-server # 推荐是server&#xff0c;都可以。#delelt sudo apt --purge remove nvidia-* CUDA Toolkit Archive | NVIDIA Developerhttps://developer.nvidia.com/cuda-toolkit-archive CUDA Toolk…

【计算机网络】TCP协议——1.报文格式详解

前言 上篇讲解了UDP报文格式。TCP和UDP是同层协议&#xff0c;都属于传输层&#xff0c;数据来源于上层——应用层 目录 一. TCP协议概述 二. TCP报文格式 1. 两个问题 2. 确认号和序列号 3. 标志位字段 4. 窗口大小 5. 校验和字段 6. 紧急指针与紧急数据 7. 选项字…

后端低代码平台探索总结

业务需求快速变化的背景 我们在对业务需求进行梳理后&#xff0c;在进行程序设计时&#xff0c;对于将来可能发生变化的常量、变量、阀值、开关、条件、公式等等&#xff0c;可能会配置在环境变量或数字字典来支持可配置。但是需求变化往往会更加复杂、更加不可预测&#xff0…

PDF控件Spire.PDF for .NET【转换】演示:将多个图像转换为单个 PDF

如果您想要将多个图像合并为一个文件以便于分发或存储&#xff0c;将它们转换为单个 PDF 文档是一个很好的解决方案。这一过程不仅节省空间&#xff0c;还确保所有图像都保存在一个文件中&#xff0c;方便共享或传输。在本文中&#xff0c;您将学习如何使用Spire.PDF for .NET …

VuePress安装及使用

目录 前言一、依赖环境二、vuepress 安装和使用1.初始化2.将 VuePress 安装为本地依赖3. package.json 中添加脚本4. 新建 docs 文件夹5.启动6. 效果 三、进阶使用1.新增配置文件2.安装搜索插件3.config.js 中增加配置4.效果展示5.注意 前言 VuePress 是一个以 Markdown 为中心…

Vue中英文翻译小结

背景&#xff1a;时局艰难&#xff0c;后端开发被强制写了vue&#xff0c;这不有个需求是中英文翻译&#xff0c;特此记录下&#xff0c;该怎么个翻译法子。 先引入全局的路由国际化文件&#xff0c;zh.js 和 en.js 1.关于插值表达Button里面 {{ $t(reinsop.common.back) }} …

软件测试技术分享| Appium用例录制

下载及安装 下载地址&#xff1a; github.com/appium/appi… 下载对应系统的 Appium 版本&#xff0c;安装完成之后&#xff0c;点击 “Start Server”&#xff0c;就启动了 Appium Server。 在启动成功页面点击右上角的放大镜&#xff0c;进入到创建 Session 页面。配置好…

❀My虚拟机上的ftp服务器搭建(centos)❀

❀My虚拟机上的ftp服务器搭建(centos)❀ 在CentOS上搭建FTP服务器可以使用vsftpd软件&#xff0c;下面是详细的搭建教程&#xff1a; ①安装vsftpd软件 在终端中输入以下命令进行安装&#xff1a; sudo yum install vsftpd ②配置vsftpd 打开vsftpd的配置文件&#xff0c;…

Apache Flume(5):多个agent模型

可以将多个Flume agent 程序连接在一起&#xff0c;其中一个agent的sink将数据发送到另一个agent的source。Avro文件格式是使用Flume通过网络发送数据的标准方法。 从多个Web服务器收集日志&#xff0c;发送到一个或多个集中处理的agent&#xff0c;之后再发往日志存储中心&…