当前位置: 首页 > backend >正文

数学建模之最短路径问题

1 问题的提出

这个是我们的所要写的题目,我们要用LINGO编程进行编写这个题目,那么就是需要进行思考这个怎么进行构建这个问题的模型

首先起点,中间点,终点我们要对这个进行设计

2 三个点的设计

起点的设计
起点就是我们进去,就是为1
为什么为1?
我们可以联想Dijkstra算法里面,我们用了st数组来进行状态的标记,这个是表示这个节点访问过还是没有访问过,如果访问过就是1,没有访问过就是0,那么我们从第一个节点开始,我们把这个节点标记为1,因为我们走过了起点,起点就是我们最先开始行走的位置

中间点的设计
中间点我们设计为0
为什么设计为0?
因为当我们走过两个点的时候,两个点的状态此时都是1,当我们减去这两个路,就可以得到0,因为这里都是1,我们都行走过,两个状态的数字都是1,所以相减为0,所以我们设计为0

终点的设计
终点我们设计为-1
为什么设计为-1?
因为我们最后的一个点走出去就是0-1,就是为-1,那么就是我们走出去了就可以停止了,这个就是终点的设计,为什么我们可以在-1的时候进行停止?因为我们规范了这个数组的大小,然后对于这个边进行求和去最小值,当我们当道-1就是停止了

3 模型的设计


这个就是我们模型的设计,这个模型首先我们创建一个目标函数,求取最小值,然后x为0,1变量,这个代表选择还是不选择,然后我们我们求取这个权值的最小值

然后下面那个条件约束就是起点,中间点,终点的设计,当i=1的时候就是1,因为这个时候还是到1,然后i=6的时候就是-1,因为这个时候表示出去,然后中间点就是0,就是i还没有到达这个6这个点,然后最小路径就是我们进行求取权值的最小值

5 LINGO求解

sets:aa/1..6/;cc(aa,aa):c,x;
endsets
data:
c = 0     3       2      10000  10000  100003     0       2      4      1      100002     2       0      10000  4      1000010000 4       10000  0      2      210000 1       4      2      0      110000 10000   10000  2      1      0;
enddatamin = @sum(cc(i,j):c(i,j)*x(i,j));@for(cc(i,j):@bin(x(i,j)));
@for(aa(i):@sum(aa(j): x(i, j)) - @sum(aa(j): x(j, i)) = @if(i #EQ# 1, 1, @if(i #EQ# 6, -1, 0));
);

上面那个模型下面会有一个 (v1,v2) 属于 G表示这个边存在在这个图上面,在我们编程的时候,是直接取得一个最大值表示这个边不存在,因为我们是求取最小值

@if语句的学习
首先if语句是可以嵌套的,就像三元表达式一样,首先判断这个表达式成不成立,如果成立就是直接返回最近的那一个值,如果不成立就返回后面第二值,然后第二个值还可以嵌套if语句来进行判断,这样就很方便让我们在LINGO编程中进行条件的选择

data语句段的学习
这个语句段最好用上,要不然后面就都是条件表达式不是很好,就比如我们上面这个,就直接赋值,补药用C(1,2) = 1,这种写法,要不然data语句段会报错,这个问题之前一直没有解决,今天解决了,什么时候用data语句段,什么时候用C(1,2) = 1这样的写法才可以让我们编程更加规范

http://www.xdnf.cn/news/10122.html

相关文章:

  • Spring Boot中使用@JsonAnyGetter和@JsonAnySetter处理动态JSON属性
  • Linux中的shell脚本
  • 基于Vite的前端自动化部署方案
  • (一)微服务(垂直AP/分布式缓存/装饰器Pattern)
  • Bootstrap项目 - 个人作品与成就展示网站
  • 【数据集】高分辨率(1 km)月尺度中国气候(降水+最高/低温)数据集(1952–2019)
  • 【目标检测】【ICCV 2021】条件式DETR实现快速训练收敛
  • Flume 自定义拦截器开发实战:添加时间戳与 JSON 处理
  • AI感知与行动:考拉悠然发布空间智能世界模型,让AI走进物理世界
  • AcroForm 表单:动态字段值调整及避免使用 “event.value“
  • 中国城市间地理距离矩阵(2024)
  • 历年南京理工大学计算机保研上机真题
  • linux常用命令笔记
  • 进程生命周期
  • Java八股-数据类型转换有哪些?类型互转会有什么问题?为什么用bigDecimal 不用double ?自动装箱和拆箱?包装类?
  • 简单说一说Modern ABAP这个概念
  • ZC-OFDM雷达通信一体化减小PAPR——直接限幅法
  • CSS级联样式(基础知识)备忘录
  • C# 结合PaddleOCRSharp搭建Http网络服务
  • MySQL大表结构变更利器:pt-online-schema-change原理与实战指南
  • ⼤模型驱动的DeepInsight Copilot在蚂蚁的技术实践
  • LINUX530 rsync定时同步 环境配置
  • 【c语言输入不大于26的整数,输出全部大写字母输入3输出ABC】2022-1-30
  • Java限制单价小数位数方法
  • sward V1.1.4版本发布,支持文档审批及文档导出
  • 天气预报中的AI:更准确的预测如何实现
  • quic为什么没有被大规模应用?
  • LangChain-自定义Tool和Agent结合DeepSeek应用实例
  • 【面试 - 遇到的问题 - 优化 - 地图】腾讯地图轨迹回放 - 回放的轨迹时间要和现实时间对应(非匀速)
  • Bonjour