基于Matlab的动态规划程序实现
lattice planner matlab例程

一、介绍Lattice planner是一种在无人车领域常用的路径规划算法。
它以栅格(lattice)的方式来表示车辆可能的路径,然后利用这些栅格来生成最佳的路径。
Matlab作为一种强大的数学计算工具,也可以用来编写Lattice planner的例程,以便研究人员和工程师可以快速验证算法的正确性和性能。
二、Lattice planner算法原理1. 栅格表示法Lattice planner使用栅格表示法来表示车辆在车道上可能的路径,这种表示法将车辆的运动分成一系列的离散状态,例如位置、速度、加速度等。
通过在栅格上搜索,可以找到最佳的路径来规避障碍物和遵守交通规则。
2. 动态规划Lattice planner基于动态规划的思想,利用离散状态空间和价值函数来寻找最佳路径。
通过从终点开始向起点反向搜索,可以找到最佳路径,并且可以在复杂环境中高效地搜索。
三、Matlab编写Lattice planner例程1. 数据准备在Matlab中编写Lattice planner的例程,首先需要准备车辆的相关参数,例如车辆动力学模型、约束条件、起点和终点的坐标等。
这些数据将作为算法的输入,用于生成路径规划。
2. 状态空间离散化利用Matlab的矩阵运算和数学函数,可以将状态空间进行离散化。
可以将位置、速度、加速度等连续状态转化为离散的栅格表示,使得算法能够高效地搜索最佳路径。
3. 动态规划算法实现利用Matlab的编程能力,可以编写动态规划算法的实现。
通过在离散状态空间上进行搜索,根据车辆的运动模型和约束条件,可以找到最佳的路径,并且可以对路径进行优化和修正。
4. 可视化Matlab提供了丰富的绘图和可视化功能,可以将生成的路径以及车辆的运动轨迹进行可视化展示。
这有助于研究人员和工程师对算法的性能进行直观的评估和分析。
四、应用与展望Matlab编写Lattice planner的例程,不仅可以帮助研究人员和工程师快速验证算法的正确性和性能,还可以应用于无人车系统的开发和测试中。
动态计划求解方法的Matlab实现及应用[]
![动态计划求解方法的Matlab实现及应用[]](https://img.taocdn.com/s3/m/d65de835a76e58fafab003d5.png)
动态规划求解方法的Matlab实现及应用[1].txt我自横刀向天笑,笑完我就去睡觉。
你的手机比话费还便宜。
路漫漫其修远兮,不如我们打的吧。
第%卷第,期信息工程大学学报S>:+%<>+,!""’年>月T>8D3F:>C53C>DEFB2>3G3?23@@D23?032H@DA2BI6@N+!""’!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!动态规划求解方法的!"#$"%实现及应用于斌,刘姝丽,韩中庚<信息工程大学信息工程学院,河南郑州#’"""!)摘要:文章对动态规划问题的求解方法进行了分析研究,根据问题的特点、难点和关键点做了针对性的处理,然后用!"#$"%做了实现尝试,从而实现了“最佳组队”和“最短路线”等问题的求解。
实践证明所采用方法和程序都是有效的。
关键词:动态规划;基本方程;!"#$"%实现;最佳组队中图分类号:*!!&+,文献标识码:-文章编号:&%.&$"%.,<!""’)",$"">’$"#!"#$"%&’"$(>"#(*+*,#-’./+"0(123*43"00(+45663*"1-"+78#9566$(1"#(*+/0123,4506789:2,。
-<=7>3?9?@3?<53AB2B8B@>C53C>DEFB2>3G3?23@@D23?,53C>DEFB2>3 G3?23@@D23?032H@DA2BI,=7@3?J7>8 #’"""!,K723F)5%9#3"1#:1IF3F:IJ23?F3L23H@AB2?FB23?B7@LI3FE2MND>?DFEE23?FNND>FM7,F3@CC@MB2H@L2AN>AF:7FAO@@3L>3@FMM>DL23?B>B7@ND>O:@E+P7@3F3FBB@ENB>3B7@ND>O:@EA>C“1@ABB@FE9C>DE23?”F3L“67>DB@ABNFB7”7FAO@@3A8MM@AAC8::IEFL@OIQFB:FO+5B2AND>H@LB7FBB7@E@B7>LF3LND>?DFEE@FD@@CC@MB2H@+:’/。
基于Matlab的动态规划算法的实现及应用

基于Matlab的动态规划算法的实现及应用动态规划(Dynamic Programming)是一种用来求解多阶段最优化问题的方法,在许多领域中都得到了广泛的应用。
本文将介绍如何使用Matlab实现动态规划算法,并通过一个具体的应用案例来说明其使用方法和效果。
动态规划算法的基本思想是将一个问题分解成多个阶段,每个阶段的最优解可以通过前一阶段的最优解来计算得到。
具体实现时,需要定义一个状态转移方程来描述问题的阶段之间的关系,以及一个递推公式来计算每个阶段的最优解。
在Matlab中,可以使用矩阵来表示问题的状态和状态转移方程,使用循环结构来进行递推计算。
下面以求解最长递增子序列(Longest Increasing Subsequence)为例来说明动态规划算法在Matlab中的实现和应用。
最长递增子序列是一个经典的动态规划问题,给定一个序列,找出一个最长的子序列,使得子序列中的元素是递增的。
可以使用动态规划算法来求解该问题。
定义一个状态数组dp,其中dp(i)表示以第i个元素结尾的最长递增子序列的长度。
初始化dp数组为1,表示每个元素自身就是一个递增子序列。
然后,使用一个循环结构遍历序列的每个元素,计算以当前元素结尾的最长递增子序列的长度。
具体实现时,需要比较当前元素与之前的元素的关系,如果当前元素大于之前的元素,则可以将当前元素加入到之前的最长递增子序列中,并更新dp(i)为dp(j)+1,其中j为小于i的所有元素的位置。
遍历dp数组,找出其中的最大值,即为整个序列的最长递增子序列的长度。
下面是Matlab代码的实现:```matlabfunction LIS = LongestIncreasingSubsequence(nums)N = length(nums);dp = ones(1, N);for i = 1:Nfor j = 1:i-1if nums(i) > nums(j)dp(i) = max(dp(i), dp(j)+1);endendendLIS = max(dp);end```以上代码定义了一个函数LongestIncreasingSubsequence,输入参数为一个序列nums,输出结果为最长递增子序列的长度LIS。
基于Matlab的动态规划算法的实现及应用

基于Matlab的动态规划算法的实现及应用动态规划是一种解决多阶段决策过程的优化技术。
它的主要思想是将问题分成几个阶段,在每个阶段用一个状态来描述问题,然后找到在每个阶段中符合条件的最优状态值,以便决定在一个阶段结束的时候采取什么决策。
在Matlab中,可以非常方便地实现动态规划算法。
这里简要介绍一下基于Matlab的动态规划算法的实现及应用。
首先,我们需要定义状态转移方程。
状态转移方程是动态规划算法的核心,决定了如何从一个状态转移到另一个状态。
例如,我们要用动态规划算法求解一个背包问题,物品的重量为w1,w2,w3,w4,w5,物品的价值为v1,v2,v3,v4,v5,背包的容量为W。
那么状态转移方程可以定义如下:dp(i,j) = max(dp(i-1,j), dp(i-1,j-w(i))+v(i))其中dp(i,j)表示前i个物品放入容量为j的背包中所能得到的最大价值。
i表示物品的数量,j表示背包的容量。
w(i)表示第i个物品的重量,v(i)表示第i个物品的价值。
上式中的max表示在当前状态下,应该选择哪个状态值。
然后我们需要初始化第一个状态dp(1,j),当只考虑第1个物品时,dp(1, j)的值与w(1)和v(1)有关。
当物品数量为0时,dp(i, j)的值为0。
接下来,我们可以使用循环以及状态转移方程来计算出dp(i,j)的值,最终得到最优的解。
在Matlab中,可以利用循环完成状态转移方程的计算,例如:dp(1,:) = (w(1) <= j).*v(1);在上述代码中,利用循环计算每个状态的最大价值。
第一行是初始化第一个状态,即当只有一个物品的时候,dp(1, j)的值为v(1)或0。
第二行是循环计算后续状态的最大价值,根据状态转移方程进行计算。
在实际应用中,动态规划算法可以用于诸如最优路径规划、时间序列分析、机器学习等领域。
例如,在机器学习中,动态规划算法可以用于序列模型的预测和分类问题。
动态规划MATLAB求解

例1系统可靠性问题某电子设备由5种元件1,2,3,4,5组成,这5中元件的可靠性分别为0.9,0.8,0.5,0.7,0.6。
为保证电子设备系统的可靠性,同种元件可并联多个。
现在允许设备使用元件的总数为15个,问如何设计使设备可靠性最大的元件安排方案。
解:将该问题看成一个5阶段动态规划问题,每个元件的配置看成一个阶段。
记:x k—配置第k个元件时可用元件的总数(状态变量);u—第k个元件并联的数目(决策变量);kc,—第k个兀件的可靠性;阶段指标函数为:v k(x k,u k)=l-(l-c k)uk;状态转移方程为:kkkkk x=x-u;基本方程为k+1kkf(x,u)=v(x,u),G(a,b)=a-b444444kf(x,u)=min iG(v(x,u),f(x))1u G D(x)J,k=4,3,2,1kkk kkkkk+1k+1kkk根据上面的阶段指标函数,状态转移方程和基本方程,写出下面的4个M函数以备计算调用,函数意义见主函数说明(1)%DecisFl.m(2)SubObjFl.m(3)TransFl.mI、”.,,[□”■.»I-.*I I".»111ifI.”HI.|KI."i....”L.,X|TrsTJ|Ln8GQL□[61®2345c7H.(4) ObjFl.mV.Editor-C=\.Fxngru Fil es ^VATUE ^K2aHffb\nrlE\xiieKiXObjF1-■(5) 调用主程序计算dynexamplel.m3(Z=x2';X t —[x :L^:Jj倉Edlitor —C=\Pro^r au.FileskUTLABkR.2OO6<b^.v0rk\z-LLEixi\drj3i?ii :«pl«1・■口回区1E.L 3.«匚S,a 匚21T KU*匸u 直z ■k二a ■|y”1与|眶 ■斗兔|旦寢丸■吐:E田m LI 鬥二□咱tS iH1j4|+1■■M .•:.-iolc>.c L HMF ; Fl=]5;KL5-t-5&件盘L=[fcl:riAFi^OfclGi S (1^】.1:I].|dyv创4npl4L.r-[p,f]=■DanicF]''E:\J-bQbjF I'TratlsFL','DbJFL')>■lyTipr^c n x H AC L S FL.T>>:)ObJIL ns讯STibObjr]m N TrorisFL.r-:■:wi.;pt(6)主程序dynprog.m(7)MATLAB主窗口运行程序。
基于Matlab的动态规划算法的实现及应用

基于Matlab的动态规划算法的实现及应用动态规划是一种常用的优化算法,可以在给定的约束条件下,求解具有最优解的问题。
它通过将原问题拆分成若干子问题,并保存子问题的解,从而避免重复计算,减少运算量,提高算法的效率。
在Matlab中,可以通过使用递归或迭代的方式来实现动态规划算法。
下面将介绍一种基于Matlab的动态规划算法的实现及应用。
我们需要确定问题的状态,即在求解过程中需要保存的信息。
然后,定义状态转移方程,即问题的解与其子问题的解之间的关系。
确定边界条件,即问题的基本解。
以求解斐波那契数列为例,斐波那契数列的定义如下:F(0) = 0F(1) = 1F(n) = F(n-1) + F(n-2) (n>=2)我们可以使用动态规划算法来求解斐波那契数列。
定义一个数组dp,用来保存每个子问题的解。
然后,通过迭代的方式,计算从小到大的每个子问题的解,直到得到问题的最优解。
在Matlab中,可以使用以下代码实现动态规划算法求解斐波那契数列:```matlabfunction [result] = Fibonacci(n)% 初始化数组dpdp = zeros(1, n+1);% 定义边界条件dp(1) = 0;dp(2) = 1;% 迭代计算每个子问题的解for i = 3:n+1dp(i) = dp(i-1) + dp(i-2);end% 返回问题的最优解result = dp(n+1);end```运行以上代码,输入一个整数n,即可求解斐波那契数列的第n项。
除了求解斐波那契数列,动态规划算法还可以应用于其他许多领域,如路径规划、背包问题等。
在路径规划中,我们可以使用动态规划算法来求解最短路径或最优路径;在背包问题中,我们可以使用动态规划算法来求解能够装入背包的最大价值。
动态规划算法是一种强大的优化算法,在Matlab中的实现也相对简单。
通过定义问题的状态、状态转移方程和边界条件,我们可以使用动态规划算法来求解各种不同类型的问题。
基于Matlab的动态规划算法的实现及应用

基于Matlab的动态规划算法的实现及应用动态规划算法是解决许多计算问题的有效方法,它可以用于组合优化、资源分配和时间序列分析等方面。
Matlab是一种高级计算软件,提供了许多内置函数,使得动态规划算法的实现变得简单。
一、动态规划算法的基本思想动态规划算法是一种优化技术,可以用于解决一些复杂的计算问题。
它的基本思想是把一个大问题分解成一系列子问题,通过解决子问题得到整体的最优解。
在动态规划算法中,通常使用递推式来描述问题的最优解。
在Matlab中,动态规划算法的实现通常包括以下几个步骤:1.定义状态变量:根据问题的特性,定义一组状态变量,用于描述问题的状态。
2.制定状态转移方程:根据问题的条件和规则,制定一组状态转移方程,用于计算问题的最优解。
3.构建转移矩阵:将状态转移方程转化为矩阵形式,便于计算和优化。
4.初始化状态变量:将初始状态赋值给状态变量,用于递推计算。
5.递推计算:根据状态转移矩阵和当前状态,计算下一时刻状态的值,直到达到目标状态。
6.输出最优解:输出最终状态对应的最优解。
三、应用实例1.背包问题背包问题是一种组合优化问题,目标是在给定的一组限制条件下,尽可能地装满容量限制的背包。
动态规划算法可以有效解决背包问题。
function [optx,optf]=knapsack(w,v,c)%w:物品的重量; v:物品的价值; c:背包容量%optx:最优解; optf:最优解对应的函数值n=length(w); %物品数量f=zeros(n+1,c+1); %状态变量fx=zeros(1,n); %物品的选择变量xfor i=1:nfor j=1:cif j<w(i) %背包容量不足的情况f(i+1,j)=f(i,j);else %背包容量足够的情况f(i+1,j)=max(f(i,j),f(i,j-w(i))+v(i));endendendoptf=f(n+1,c); %最优解j=c; %从后往前寻找物品for i=n:-1:1if f(i+1,j)>f(i,j)x(i)=1;j=j-w(i);endendoptx=x; %最优解2.最长公共子序列问题最长公共子序列问题是一种字符串匹配问题,目标是在两个字符串中找到最长的公共连续子序列。
基于Matlab的动态规划算法的实现及应用

基于Matlab的动态规划算法的实现及应用动态规划算法是一种解决多阶段决策问题的优化方法,它可以在每个阶段选择最优决策,并且在各个阶段间保持最优子结构,从而达到整体最优的目的。
在实际应用中,动态规划算法被广泛用于求解优化问题、路径规划、资源分配等方面。
本文将介绍基于Matlab 的动态规划算法的实现及应用,并深入探讨其在实际问题中的应用。
一、动态规划算法的基本原理动态规划算法的基本原理是通过将问题分解为子问题,并计算每个子问题的最优解,然后存储下来以供后续使用。
最终得到整体最优解。
动态规划算法通常包括以下几个步骤:1. 确定状态和状态转移方程:首先需要确定问题的状态,然后建立状态之间的转移关系,也就是状态转移方程。
状态转移方程描述了问题的子问题之间的关系,是动态规划算法的核心。
2. 初始化:初始化动态规划数组,将初始状态下的值填入数组中。
3. 状态转移:利用状态转移方程计算出各个阶段的最优解,并将其存储在动态规划数组中。
4. 求解最优解:根据动态规划数组中存储的各个阶段的最优解,可以得到整体最优解。
Matlab是一种强大的计算软件,具有丰富的数值计算函数和可视化工具,非常适合实现动态规划算法。
下面以一个简单的背包问题为例,介绍如何在Matlab中实现动态规划算法。
假设有n件物品,每件物品的重量为w[i],价值为v[i]。
现在有一个容量为C的背包,问如何选择物品放入背包,使得背包中物品的总价值最大。
我们需要确定问题的状态和状态转移方程。
在这个问题中,我们可以定义状态dp[i][j]表示在前i件物品中选择若干个放入容量为j的背包中所能获得的最大价值。
状态转移方程可以表示为:dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i])然后,我们可以利用Matlab实现这个动态规划算法,代码如下:```matlabfunction max_value = knapsack(w, v, C)n = length(w);dp = zeros(n+1, C+1);for i = 1:nfor j = 1:Cif j >= w(i)dp(i+1,j+1) = max(dp(i,j+1), dp(i,j-w(i)+1)+v(i));elsedp(i+1,j+1) = dp(i,j+1);endendendmax_value = dp(n+1,C+1);end```三、动态规划算法在实际问题中的应用动态规划算法在实际问题中有着广泛的应用,下面以路径规划问题为例,介绍动态规划算法的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动态规划方法的Matlab 实现与应用动态规划(Dynamic Programming)是求解决策过程最优化的有效数学方法,它是根据“最优决策的任何截断仍是最优的”这最优性原理,通过将多阶段决策过程转化为一系列单段决策问题,然后从最后一段状态开始逆向递推到初始状态为止的一套最优化求解方法。
1.动态规划基本组成(1) 阶段 整个问题的解决可分为若干个阶段依次进行,描述阶段的变量称为阶段变量,记为k(2) 状态 状态表示每个阶段开始所处的自然状况或客观条件,它描述了研究问题过程的状况。
各阶段状态通常用状态变量描述,用k x 表示第k 阶段状态变量,n 个阶段决策过程有n+ 1个状态。
(3) 决策 从一确定的状态作出各种选择从而演变到下一阶段某一状态,这种选择手段称为决策。
描述决策的变量称为决策变量,决策变量限制的取值范围称为允许决策集合。
用()k k u x 表示第k 阶段处于状态k x 时的决策变量,它是k x 的函数。
用()k k D x Dk(xk)表示k x 的允许决策的集合。
(4) 策略 每个阶段的决策按顺序组成的集合称为策略。
由第k 阶段的状态k x 开始到终止状态的后部子过程的策略记为{}11(),(),,()k k k k n n u x u x u x ++ 。
可供选择的策略的范围称为允许策略集合,允许策略集合中达到最优效果的策略称为最优策略。
从初始状态*11()x x =出发,过程按照最优策略和状态转移方程演变所经历的状态序列{}****121,,,,n n x x x x + 称为最优轨线。
(5) 状态转移方程 如果第k 个阶段状态变量为k x ,作出的决策为k u ,那么第k+ 1阶段的状态变量1k x +也被完全确定。
用状态转移方程表示这种演变规律,记为1(,)k k k x T x u +=。
(6) 指标函数 指标函数是系统执行某一策略所产生结果的数量表示,是衡量策略优劣的数量指标,它定义在全过程和所有后部子过程上,用()k k f x 表示。
过程在某阶段j 的阶段指标函数是衡量该阶段决策优劣数量指标,取决于状态j x 和决策j u ,用(,)j j j v x u 表示。
2.动态规划基本方程(){}11()min ,,(),()k k k k k k k k k k f x g v x u f x u D x ++=∈⎡⎤⎣⎦Matlab 实现 (dynprog.m 文件)function [p_opt,fval]=dynprog (x,DecisFun,SubObjFun,TransFun,ObjFun)% x 是状态变量,一列代表一个阶段的所有状态;% M-函数DecisFun(k,x) 由阶段k 的状态变量x 求出相应的允许决策变量; % M-函数SubObjFun(k,x,u) 是阶段指标函数,% M-函数ObjFun(v,f) 是第k 阶段至最后阶段的总指标函数% M-函数TransFun(k,x,u) 是状态转移函数, 其中x 是阶段k 的某状态变量, u 是相应的决策变量; %输出 p_opt 由4列构成,p_opt=[序号组;最优策略组;最优轨线组;指标函数值组];%输出 fval 是一个列向量,各元素分别表示p_opt 各最优策略组对应始端状态x 的最优函数值。
k=length(x(1,:)); % 判断决策级数x_isnan=~isnan(x); % 非空状态矩阵t_vubm=inf*ones(size(x)); % 性能指标中间矩阵f_opt=nan*ones(size(x)); % 总性能指标矩阵d_opt=f_opt; % 每步决策矩阵tmp1=find(x_isnan(:,k)); % 最后一步状态向量tmp2=length(tmp1); % 最后一步状态个数for i=1:tmp2u=feval(DecisFun,k,x(tmp1(i),k)); tmp3=length(u); % 决策变量for j=1:tmp3 % 求出当前状态下所有决策的最小性能指标tmp=feval(SubObjFun,k,x(tmp1(i),k),u(j));if tmp <= t_vubm(i,k) %t_vubf_opt(i,k)=tmp;d_opt(i,k)=u(j);t_vubm(i,k)=tmp;end;end;endfor ii=k-1:-1:1tmp10=find(x_isnan(:,ii));tmp20=length(tmp10);for i=1:tmp20 %求出当前状态下所有可能的决策u=feval(DecisFun,ii,x(tmp10(i),ii));tmp30=length(u);for j=1:tmp30 % 求出当前状态下所有决策的最小性能指标tmp00=feval(SubObjFun,ii,x(tmp10(i),ii),u(j)); % 单步性能指标tmp40=feval(TransFun,ii,x(tmp10(i),ii),u(j)); % 下一状态tmp50=x(:,ii+1)-tmp40; % 找出下一状态在 x 矩阵的位置tmp60=find(tmp50==0);if~isempty(tmp60),if nargin<5,tmp00=tmp00+f_opt(tmp60(1),ii+1); % set the default object valueelse,tmp00=feval(ObjFun,tmp00,f_opt(tmp60(1),ii+1)); end %当前状态的性能指标 if tmp00<=t_vubm(i,ii) f_opt(i,ii)=tmp00;d_opt(i,ii)=u(j);t_vubm(i,ii)=tmp00; end; end;end; end;end;fval=f_opt(:,1);tmp0 = find(~isnan(fval));fval=fval(tmp0,1);p_opt=[];tmpx=[];tmpd=[];tmpf=[];tmp01=length(tmp0);for i=1:tmp01tmpd(i)=d_opt(tmp0(i),1);tmpx(i)=x(tmp0(i),1);tmpf(i)=feval(SubObjFun,1,tmpx(i),tmpd(i));p_opt(k*(i-1)+1,[1,2,3,4])=[1,tmpx(i),tmpd(i),tmpf(i)];for ii=2:ktmpx(i)=feval(TransFun,ii,tmpx(i),tmpd(i));tmp1=x(:,ii)-tmpx(i);tmp2=find(tmp1==0);if ~isempty(tmp2),tmpd(i)=d_opt(tmp2(1),ii);end;tmpf(i)=feval(SubObjFun,ii,tmpx(i),tmpd(i));p_opt(k*(i-1)+ii,[1,2,3,4])=[ii,tmpx(i),tmpd(i),tmpf(i)];end;end;3.动态规划方法应用例 某电子设备由5种元件1,2,3,4,5组成,其可靠性分别为0.9,0.8,0.5,0.7,0.6 为保证电子设备系统的可靠性,同种元件可并联多个。
现允许设备使用元件的总数为15个,问如何设计使设备可靠性最大。
将该问题看成一个5阶段动态规划问题,每个元件的配置看成一个阶段。
记k x 为配置第k 个元件时可用元件的总数(状态变量);k u 为第k 个元件并联的数目(决策变量);k c 为第k 个元件的可靠性,阶段指标函数为 (,)1(1)k uk k k k v x u c =−−; 状态转移方程为1k k k x x u +=−基本方程为(){}{}111()min ,,()min k k k k k k k k k f x g v x u f x v f +++==⎡⎤⎣⎦i根据上述的允许决策、阶段指标函数、状态转移方程和基本方程写出下面的4个M-函数%DecisF1.mfunction u=DecisF1(k,x) %在阶段k 由状态变量x 的值求出其相应的决策变量所有的取值 if k==5,u=x; else u=1:x-1;end%SubObjF1.mfunction v=SubObjF1(k,x,u) %阶段k 的指标函数 c=[0.9,0.8,0.5,0.5,0.4]; v=1-(1-c(k)).^ u; v= -v; %将求max 转换为求min%TransF1.mfunction y=TransF1(k,x,u) %状态转移方程 y=x-u;%ObjF1.mfunction y=ObjF1(v,f) %基本方程中的函数g y=v*f; y=-y; %将求max 转换为求min调用DynProg.m 计算的主程序如下(example1.m): clear;n=15; %15个元件 x1=[n;nan*ones(n-1,1)];x2=1:n; x2=x2’; x=[x1,x2,x2,x2,x2];[p,f]=dynprog(x,’DecisF1’,’SubObjF1’,’TransF1’,’ObjF1’)运行结果: p = 1.0000 15.0000 2.0000 -0.9900 2.0000 13.0000 2.0000 -0.9600 3.0000 11.0000 4.0000 -0.9375 4.0000 7.0000 3.0000 -0.9730 5.0000 4.0000 4.0000 -0.9744 f = -0.8447结果表明1,2,3,4和5号元件分别并联2,2,4,3,4个,系统总可靠性最大为0.84474.实验要求(1) 根据前面2,3部分的说明,编写出dynprog.m ,DecisF1.m ,SubObjF1.m ,TransF1.m ,ObjF1.m 五个文件,并运行example1.m 文件,查看结果是否正确。
(2) 现有4种不同的车床1,2,3,4, 同时加工500件相同的零件。
各车床加工一个零件的时间分别为0.5,0.1,0.2和0.05 . 问如何给4个车床分配加工零件数目,使完工时间最短? 要求参考(1) 编写出DecisF2.m ,SubObjF2.m ,TransF2.m ,ObjF2.m 四个文件,通过调用dynprog 函数,求解本问题。
[提示:可将问题按车床编号分为4个阶段。
设状态变量k x 表示分配给第k 号车床至第4号车床的零件总数。
决策变量k u 表示分配给第k 号车床的零件数, 1,2,,k k u x = 且有44u x =.状态转移方程1k k k x x u +=−, 阶段指标函数()k k v u 表示k u 个零件分配到第k 号车床加工所需的时间()k k k k v u u t =, k t 是k 号车床的加工时间. ()k k f x 表示k x 个零件分配给第k 至第4号车床加工所需的最短时间 (用时最长的车床所需时间为总加工时间)](3) 已知离散系统方程 x(k+1)= x(k)+u(k), x(1)=1, }1,1{)(−∈k u ,4321()()()()()k J x k u k x k u k x k =⎡⎤=++⎣⎦∑, 求控制序列u*(k)和状态x*(k), 使J=min.要求参考(1) 编写出DecisF3.m ,SubObjF3.m ,TransF3.m ,ObjF3.m 四个文件,通过调用dynprog 函数,求解本问题。