最短哈密尔顿圈matlab解法_数学建模学习笔记

本文是《数学建模算法与应用》的读书笔记,重点介绍了如何使用MATLAB解决图论中的最短路径问题(Dijkstra算法和Floyd算法)以及最小生成树问题(Prim算法和Kruskal算法)。通过实例展示了MATLAB在图论优化问题中的应用,包括计算最短路径和最小生成树的MATLAB代码实现。
摘要由CSDN通过智能技术生成

《数学建模算法与应用》司守奎著 阅读笔记。

一、线性规划

线性规划:在一组线性约束条件的限制下,求一线性目标函数的最大或最小值

一般标准型:

equation?tex=%5Cbegin%7Balign%7D+%26%5Ctext%7Bmax%7D+%5C+%5C+z%3D%5Csum_%7Bj%3D1%7D%5E%7Bn%7D%7Bc_jx_j%7D%2C%5C%5C+%5Ctext%7Bs.t.%7D%26+%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D+%26%5Csum_%7Bj%3D1%7D%5E%7Bn%7D%7Ba_%7Bij%7Dx_j%7D%3Db_i%2C+i%3D1%2C2%2C...%2Cm%2C%5C%5C++%26x_j%5Cgeq0%2Cj%3D1%2C2%2C...%2Cn++%5Cend%7Bmatrix%7D%5Cright.++%5Cend%7Balign%7D%5Ctag%7B1%7D

Matlab标准型:

equation?tex=%5Cbegin%7Balign%7D+%26%5Cmin_x+%5C+%5C+f%5E%7BT%7Dx%5C%5C+%5Ctext%7Bs.t.%7D%26+%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D+A%5Ccdot+x%5Cleq+b%2C%5C%5C++Aeq%5Ccdot+x%3D+beq%2C%5C%5C+lb%5Cleq+x+%5Cleq+ub++%5Cend%7Bmatrix%7D%5Cright.++%5Cend%7Balign%7D%5Ctag%7B2%7D

Matlab求解线性规划的命令为:

[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)

可转化为线性规划的问题:

equation?tex=%5Cbegin%7Balign%7D+%26%5Ctext%7Bmax%7D+%5C+%5C+%5Cleft%7C+x_1+%5Cright%7C%2B%5Cleft%7C+x_2+%5Cright%7C%2B...%5Cleft%7C+x_n+%5Cright%7C%2C%5C%5C+%26+%5Ctext%7Bs.t.%7D+Ax%5Cleq+b+%5Cend%7Balign%7D%5Ctag%7B3%7D

取,

equation?tex=u_i%3D%5Cfrac%7Bx_i%2B%5Cleft%7C+x_i+%5Cright%7C%7D%7B2%7D ,

equation?tex=v_i%3D%5Cfrac%7B%5Cleft%7C+x_i+%5Cright%7C-x_i%7D%7B2%7D :

equation?tex=%5Cbegin%7Balign%7D+%26%5Ctext%7Bmax%7D+%5C+%5C+%5Csum_%7Bj%3D1%7D%5E%7Bn%7D%7B%28u_i%2Bv_i%29%7D%2C%5C%5C+%5Ctext%7Bs.t.%7D%26+%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D+%26%5Cbegin%7Bbmatrix%7D++A%26+-A+%5Cend%7Bbmatrix%7D%5Cbegin%7Bbmatrix%7D++u%5C%5Cv+%5Cend%7Bbmatrix%7D%5Cleq+b%5C%5C++%26u%2Cv%5Cgeq0%5Cend%7Bmatrix%7D%5Cright.++%5Cend%7Balign%7D%5Ctag%7B4%7D

二、整数规划

整数规划分为两大类:1)变量全限制为整数,纯整数规划;2)变量部分限制为整数,混合整数规划。

注:整数规划的最优解不能按照实数最优解简单取整而获得。

2.1 0-1型整数规划

0-1型整数规划是将某些变量

equation?tex=x_j 限制为二进制变量的规划问题。在实际问题中,引入0-1变量可以把需要分类讨论的数学规划问题统一为一个规划问题。下面举例:

1)相互排斥的约束条件规划问题:

如果有

equation?tex=m 个互相排斥(需要分类讨论)的约束条件

equation?tex=a_%7Bi1%7Dx_1%2B...%2Ba_%7Bin%7Dx_n%5Cleq+b_i+%2Ci%3D1%2C2%2C...%2Cm+%5Ctag%7B5%7D

由于

equation?tex=m 个约束条件互相排斥,故只有一个会起作用,引入

equation?tex=m 个0-1变量来避免分类讨论:

equation?tex=y_i%3D%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D+1%EF%BC%8C%E7%AC%ACi%E4%B8%AA%E7%BA%A6%E6%9D%9F%E8%B5%B7%E4%BD%9C%E7%94%A8%5C%5C++0+%EF%BC%8C%E7%AC%ACi%E4%B8%AA%E7%BA%A6%E6%9D%9F%E6%97%A0%E4%BD%9C%E7%94%A8+%5Cend%7Bmatrix%7D%5Cright.%5Ctag%7B6%7D

引入一个充分大的常数

equation?tex=M ,可将

equation?tex=m 个互相排斥(需要分类讨论)的约束条件,统一为

equation?tex=%28m%2B1%29 个约束条件:

equation?tex=a_%7Bi1%7Dx_1%2B...%2Ba_%7Bin%7Dx_n%5Cleq+b_i+%2B%281-y_i%29M+%2Ci%3D1%2C2%2C...%2Cm+%5Ctag%7B7%7D

equation?tex=y_1%2By_2%2B..%2By_m%3D1%2C%5Ctag%7B8%7D

由(7)式知,当

equation?tex=y_i%3D0 时,由于M充分大,则不等式恒成立,约束条件失效;由(8)式可知,仅有一个

equation?tex=y_i 可以取

equation?tex=1 .

2)固定费用问题和指派问题

见书P13,P14 ,不太好统一形式,不过多赘述了。。

2.2 蒙特卡洛法(随机取样法)

蒙特卡洛法是基于大量事件的统计结果来实现一些确定性问题的计算方法。

下面举一个实际编程案例:

例:

equation?tex=y%3Dx%5E2%E3%80%81y%3D12-x

equation?tex=x 轴在第一象限围成的一个曲边三角形。用随机实验法求得该三角形的面积。

解:随机实验的思想为,在

equation?tex=%5B0%2C12%5D%5Ctimes%5B0%2C9%5D 的矩阵区域内,按均匀分布取样若干大量的随机点,统计落入计算区域的随机点个数,求得频数,曲边三角形的面积则为矩阵面积乘频数。

clc,clear

x = unifrnd(0,12,[1,10000000])

y = unifrnd(0,9,[1,10000000])

pinshu = sum(y=3);

area_appr = 12 * 9 * pinshu/10^7

非线性整数规划问题:

非线性规划问题尚未具备一种通用成熟且准确的求解方法,但由于加入了整数限制,则非线性规划问题的解的个数也变为了有限个,有了蒙特卡洛法后,我们则可以用枚举法求出满意解。

具体编程案例见书P15。

2.3 整数线性规划的计算机求解

Matlab下混合整数线性规划的标准型为:

equation?tex=%5Cbegin%7Balign%7D+%26%5Cmin_x+%5C+%5C+f%5E%7BT%7Dx%5C%5C+%5Ctext%7Bs.t.%7D%26+%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D+x%28%5Ctext%7Bintcon%7D%29%E4%B8%BA%E6%95%B4%E6%95%B0%5C%5CA%5Ccdot+x%5Cleq+b%2C%5C%5C++Aeq%5Ccdot+x%3D+beq%2C%5C%5C+lb%5Cleq+x+%5Cleq+ub++%5Cend%7Bmatrix%7D%5Cright.++%5Cend%7Balign%7D%5Ctag%7B9%7D

其中

equation?tex=%5Ctext%7Bintcon%7D 为整数变量的索引。

Matlab求解整数线性规划的命令:

[x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)

三、非线性规划

非线性规划:目标函数或约束条件包含非线性函数的规划问题。

非线性规划的数学模型一般形式:

equation?tex=%5Cbegin%7Balign%7D+%26%5Cmin+%5C+%5C+f%28x%29%5C%5C+%5Ctext%7Bs.t.%7D%26+%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D++h_j%28x%29%5Cleq+0%2C+j%3D1%2C...%2Cq%2C%5C%5C+g_i%28x%29%3D0%2C+i%3D1%2C...p%E3%80%82++%5Cend%7Bmatrix%7D%5Cright.++%5Cend%7Balign%7D%5Ctag%7B10%7D

其中:

equation?tex=x%3D%5Bx_1%2Cx_2%2C...%2Cx_n%5D%5ET 为模型的决策变量;

equation?tex=f 为目标函数;

equation?tex=g_i 为等式约束;

equation?tex=h_j 为不等式约束;且

equation?tex=f%2Cg_i%2Ch_j 中包含非线性函数。

注:若线性规划问题的最优解存在,则此最优解只能在可行域的边界上达到;而非线性规划的最优解可能在可行域的任意一点达到。

Matlab下非线性规划的标准形式:

equation?tex=%5Cbegin%7Balign%7D+%26%5Cmin+%5C+%5C+f%28x%29%5C%5C+%5Ctext%7Bs.t.%7D%26+%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D+A%5Ccdot+x%5Cleq+b%2C%5C%5C++Aeq%5Ccdot+x%3D+beq%2C%5C%5Cc%28x%29%5Cleq+0%2C%5C%5Cceq%28x%29%3D+0%2C%5C%5C+lb%5Cleq+x+%5Cleq+ub++%5Cend%7Bmatrix%7D%5Cright.++%5Cend%7Balign%7D%5Ctag%7B11%7D

其中

equation?tex=f 为目标函数;

equation?tex=c%28x%29%2Cceq%28x%29 为非线性向量函数。

Matlab求解此标准型非线性规划问题的命令为:

[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

其中,fun为用M文件定义的目标函数

equation?tex=f%28x%29 ; nonlcon是用M文件定义的非线性向量函数

equation?tex=c%28x%29%2Cceq%28x%29 ; options 定义了优化参数,可用Matlab默认设置;其余变量若无则用"[]"代替

3.1 无约束极值问题

无约束极值问题:即没有约束条件,仅求解目标函数极值的优化问题。

其数学模型可简单的表示为:

equation?tex=%5Cmin_x+f%28x%29+%5Ctag%7B12%7D

在Matlab中有两个专用函数求解该极小值问题,fminunc 和 fminsearch。

Matlab中 fminunc的基本命令:

[x,fval] = fminunc(fun,x0,options)

其中:fun是用M文件定义的函数。当fun只有一个返回值时,是函数值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值