【2024_CUMCM】LINGO入门+动态规划

目录

什么是动态规划

怎么使用动态规划?

例题:最短路线问题

2020b-问题一

稳定性分析

灵敏度分析 


什么是动态规划

基本想法:将原问题转换为一系列相互联系的子问题,然后通过逐层递推求得最后的解

基本思想:解决最优解问题,满足最优性原理(最优策略的任何一部分子策略必需是最优的)

在这类问题中,可能会有许多可行解,每一个解都对应一个值,我们希望找到具有最优值的解

动态规划算法中蕴含着递归的思想,但是递归问题中会出现某些子问题被计算多次,而如果利用动态规划算法,可以把已经计算过的子问题的解给装起来,然后用到的时候再拿出来,减少计算次数。

例如:斐波拉契数列

递归求法

//定义主函数
#include<stdio.h>
int main()
{
	int F(int n); //数组
	printf("%d\n",F(5));
	return 0;
}
//Fibonacci数列的递归算法
int F(int n)
{
	// 进行条件判断
    if(n<=1)
    {return 1;}
    else
    {return F(n-1)+F(n-2);}
}

动态规划求法

#include<stdio.h>
int main()
{
	int Fibonacci(int n);
	printf("%d\n",Fibonacci(5));
	return 0;
}
int Fibonacci(int n)
{
	//申请一个数组存放子问题的解 
	int f[n+1],i;
	f[0]=1;
	f[1]=1;
	for(i=2;i<=n;i++)
    {
		f[i]=f[i-1]+f[i-2];}
	return f[n];
}

怎么使用动态规划?


1.将过程分为恰当的阶段

2.找变量,定义决策变量

3.明确目标,写出目标函数

4.列约束,寻找对于得到最优解的约束条件

5.写出状态转移方程,根据状态才可作出决策


例题:最短路线问题

根据题目,可以分为七个阶段

解题时只需将每一条路径全都定义出来,然后导入数据大致就可解出答案

但是为了掌握其他导入数据的方法,我们考虑通过xlsx导入数据,通过一顿操作,输入数据,空值使用-1代替

然后写入空值,选择内容,“ctrl+h”-定位-空值- ‘-1’ -“ctrl+enter” 

还需要定义数据名称,拖拽选中数据,在左上角进行定义(可以看下面的另一张表格图)

  

model:

sets:
vertex/V1..V16/:V;  //定义一个名为V的顶点集合(把它理解成一个点,还没有赋值)

road(vertex,vertex):R_D2;   //定义一个名为R_D2的道路集合
 

RR(road)|R_D2(&1,&2)#gt#0:D;   //定义一个名为D的距离矩阵,其元素是道路集合R_D2中的元素,且距离大于0

endsets

原本没有加粗行的定义,但是因为数据中空值用-1代替,所以我们需要将非-1的值拿出来

`xx(xx)`这是正常的变量定义,`|`这个符号表示过滤,后面表示R_D2数据要大于等于0,并赋值为D。不难发现,这个过滤的语言只是多了`|`and`#`,其他与bash语言是比较相近的。 

经上述操作就可以筛选出非空的路程值

data:
R_D2=@ole('D:\jianmo\R.xlsx');
enddata

下面进行数据导入

参考:lingo基础入门Day 11——lingo外部访问数据、文本文件、电子表格、数据库_lingo读取excel数据-CSDN博客

利用ole函数

  • 访问Excel电子表格的关键是在Excel中定义数据库
  • 定义数据块的方法是先选择单元格区域,从右键菜单中选定义名称,本题定义为R_D2
  • 用lingo访问Excel电子表格前,应当先用Excel打开相应的数据文件,否则不能读写数据。

写出约束

运用for函数遍历出所有D的情况

@for(RR(i,j):D(i,j)=R_D2(i,j));

将起点(V1)的值设置为0

运用for函数与min函数对集进行循环,计算除起点外的其他顶点的最短路径值。

对于每个顶点i(除了起点),将其值设置为所有可能的前驱顶点j的最短路径值加上从j到i的距离的最小值

V(1)=0;

@for(vertex(i)|i#gt#1:V(i)=@min(RR(j,i):V(j)+D(j,i)));

end


2020b-问题一

 2020全国大学生数学建模竞赛论文展示(B125) - 2020全国大学生数学建模竞赛论文展示 - 中国大学生在线 (moe.gov.cn)

2020全国大学生数学建模竞赛B题讲评:穿越沙漠 - 2020数学建模赛题讲评 - 中国大学生在线 (moe.gov.cn)


 

稳定性分析

李雅普诺夫(第二方法)稳定性分析+例题_证明李亚普诺夫atp+pa=-q-CSDN博客

这个我看不太懂 


灵敏度分析 

数学建模评价类方法01——灵敏度分析_数学建模灵敏度分析怎么写-CSDN博客

上面的链接写的很好 

在解题时,结果会受到多个因素的影响,有一些因素是固定的,有一些因素在实际中是有变化的,此时,我们通过取该因素周围值,进行计算,如果对结果有影响,那我们就说这是敏感的,那究竟有多敏感,就要进行灵敏度分析,看结果与变化率的关系。

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值