数学建模 电梯调度问题16
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电梯调度问题
商业中心某写字楼有二十二层地上建筑楼层和两层地下停车场,6部电梯,每部电梯最大载重是20个正常成人的体重总和。
工作日里每天早晚高峰时期均是非常拥挤,而且等待电梯的时间明显增加。
请你针对早晚高峰期的电梯调度问题建立数学模型,以期获得合理的优化方案。
1)请给出若干合理的模型评价指标。
2)暂不考虑该写字楼的地下部分,每层楼层的平均办公人数经过调查已知(见表1)。
假设每层楼之间电梯的平均运行时间是3秒,最底层(地上一层)平均停留时间是20秒,其他各层若停留,则平均停留时间为10秒,电梯在各层的相应的停留时间内乘梯人员能够完成出入电梯。
表1:该写字楼各层办公人数
楼层人数楼层人数楼层人数
1无9236 617200
2 3 4 5 6 7 8208 52
177
222 5
130
181
191
236 7
10
11
12
13
14
15
16
139
272
272
272
270
300
264
18
19
20
2l
22
200
200
200
207
207
请你针对这样的简化情况,建立你的数学模型(列明你的假设),给出一个尽量最优的电梯调度方案,并利用所提评价指标进行比较。
3)将你在第2问中所建立的数学模型进一步实际化,以期能够尽量适用于实际情况,用于解决现实的电梯调度问题。
问题备注:
本题的评分标准按照以下先后顺序:逻辑的严谨程度-行文与模型描述的条理程度-模型和现实问题的接近程度-以及所用数学工具的理论程度。
摘要
随着科技的发展,人们逐步加快了自己的步伐,高节奏的生活,对于时间的要求,越来越高,写字楼里的人来也匆匆去也匆匆,在高峰期时段对电梯的使用最多,电梯的合理化应用在此显得尤为重要,没有合理的优化方案,不仅影响了乘客的上班时间,同时,电梯的多次停顿也造成了一定程度的能源浪费,所以在此提出得到优化方案,并作出计算分析其优化程度。
本文首先根据电梯群控模型评价指标体系,从乘客者的候梯时间和乘梯时间和能耗三个角度考虑。
最初选定方案一
电梯编号负责楼层
1—2 2-10
3—4 11-17
5—6 18-22
方案二
电梯编号负责楼层
1 2 3 4 5 6
2 7 8 9 10
3 11 12 13
4 14 1
5 16
5 17 18 19
6 20 21 22
我们将建立一个多目标规划模型,对该模型的建立,分三个目标:乘客的平均候梯时间要短,乘客的平均乘梯时间要短,能源耗损要少。
利用这三个指标来综合评价电梯群控方案的优劣。
并采用模糊评价和多目标优化群控和借助实现蒙特卡罗模拟的思想,建立了全面合理的电梯调度方案的评价体系。
并将模拟出的数据代入评价函数,从而帮助确定电梯调度的最佳策略。
根据建模得到的结果,最终得到的最佳方案为方案二。
最后本文还根据使用的算法,结合实际情况,对模型的优缺点进行了详细的分析与评价,并提出了改进和模型推广方向。
最后本文就所建立的模型在实际运用中的作用进行了分析,并提出了改进方向。
结合实际,加入重要因素的考虑,比如考虑其他交通流,考虑个别人群满意度。
关键词排队系统动态优化算法层次分析局部调整计算机模拟仿真
一,问题的重述
电梯是高层建筑的主要垂直交通工具,在现代社会中扮演着极其重要的角色。
如今在一幢写字楼中,由于每天早晚上下班的时间固定,所以人们乘坐电梯的时间也相对集中,在某些时间段人流相对密集。
结果有几部电梯在高峰时段每一层都停下来各上一两位乘客,这样导致乘客的平均等待时间较长,平均乘梯时间长且电梯能耗较大。
因此,改善电梯在高峰模式下的调度算法,研究改善当前电梯运行情况的方案。
现实地观察:现有一幢写字楼,6部电梯,每部电梯最大载重是20个正常成人的体重总和. 每层楼层的平均办公人数经过调查已知(见表1)。
假设每层楼之间电梯的平均运行时间是3秒,最底层(地上一层)平均停留时间是20秒,其他各层若停留,则平均停留时间为10秒,电梯在各层的相应的停留时间内乘梯人员能够完成出入电梯。
早晨上班高峰时期的交通流全部为从门厅上行的乘客(不考虑其他性质的交通流)。
下午下班的总人数仍从每层的下楼人数可用随机数模拟,下班时乘客都下到门厅(不考虑其他性质的交通流)在第一问中,我们为6个电梯安排好各自负责的楼层,之间互不干扰。
利用计算机仿真,模拟出各个乘客的楼层与到达的时间。
经过局部调整和多次计算,比较得出较好。
二、问题分析
本题建立了一个电梯群控模型,研究在高峰模式下改善电梯调度算法、优化电梯运行情况方案的问题。
首先,为得到最优的结果,应在提高顾客满意度的同时,使电梯的能量消耗也维持在一个比较低的水平。
考虑到优化前的方案在高峰时段每一层都停下来各上一两位乘客,造成了时间的浪费,延长了乘客的等待时间,因此在设计较为优化的调度方案时,应尽量避免每一层都停下来。
基于上述原则,结合题目要求与约束条件,考虑到现实生活中的要求,建立了一些调度方案。
将这些方案与原有方案进行比较,度量缩短的等待时间,进而判断每种方案的可取程度。
在第一问共两个评价指标“乘客满意度”和“电梯的能耗”
在第二中,将影响电梯调度模型的各个因素利用层次分析法进行融合,得到总体的满意度评价体系。
利用该体系衡量问题一中的方案,即可比较出各个方案的改善程度。
该部分主要运用 MATLAB 进行层次分析。
方案二
电梯编号负责楼层
1 2 3 4 5 6
2 7 8 9 10
3 11 12 13
4 14 1
5 16
5 17 18 19
6 20 21 22
此方案为最优方案。
第三问,为使建议能被采纳,需向管理员申明利弊,比较得出新模型的优越性,利用数据进行说明,就比较容易让人信服,并最终被采纳。
三.模型的假设
1.早晨某一时刻以前办公人员已陆续到达最底层。
2上班高峰期时,当电梯下降时,没有人员在其中,电梯直接从原目标层回到最底层;下班高峰期类似。
3.电梯只能运送目标层在工作区间内的员工,而不能运送其他员工,即使它已经处在待命状态。
4、进入轿厢的人是理想的,即不存在个体差异,能进入轿厢的乘客数与轿厢额定载人数正好相符合;
5、电梯的层间运行时间,层站停靠一次的时间是相同的,固定的,不因轿厢内乘客的多少而发生变化;
6、电梯在层站停靠需要固定的一段时间,但每个乘客出入电梯不需要任何时间;
7、所有乘客对电梯的优先权是相同的,不存在需要优先服务的乘客,除非电梯系统认为该乘客为长时间等待而需要优先服务:
8.电梯到达目标层立即停止,不考虑时间造成的浪费。
9.电梯无任何故障到达目标层,及停靠时间。
四.符号说明
n 乘坐电梯的乘客总数
t ij乘坐电梯的乘客总数
v i乘客 i 早晨到达门厅的时间
'
v i乘客i上行时的目标楼层
w i乘客 i 下行前到达所在楼层电梯入口的时间
'
w i乘客i下行前所在楼层
t所有乘客的平均等待时间
t'所有乘客的平均乘梯时间
t1所有乘客上楼时的平均等待时间
'
t1所有乘客上楼时的平均乘梯时间
t2所有乘客下楼时的平均等待时间
'
t2所有乘客下楼时的平均乘梯时间
wait i乘客 i 在上楼时,进入电梯之前的等待时间(仅当乘客需要排队等待
电梯时计算)
'
wait i乘客i在下楼时,进入电梯之前的等待时间(仅当乘客需要排队等待
电梯时计算)
elevator i乘客 i 在上楼时,在电梯内的乘梯时间
'
elevator i乘客i在下楼时,在电梯内的乘梯时间
s'电梯上行时走过的总的路程
s''电梯下行时走过的总的路程
z'电梯上行时的平均停靠次数
z''电梯下行时的平均停靠次数i
q
电梯 i 在上行过程中总的停靠次数
i
'电梯 i 在下行过程中总的停靠次数
q
i
Y1乘客对平均等待时间的满意度
Y2乘客对平均乘梯时间的满意度
Y3对电梯停靠总次数的满意度
Y4对电梯运行总路程的满意度
Y 电梯群控模型调度方案的综合评价指标
五、电梯群控模型评价指标体系的建立
在电梯的群控模型中,不同的电梯调度方案会产生不同的调度结果。
为比较各种调度方法的优劣,有必要建立电梯群控模型的评价指标体系,来比较不同调度方案的不同。
影响电梯调度方案好坏的因素有很多,但为简化模型,并结合题目中的具体要求,将“乘客满意度”和“电梯的能耗”作为影响电梯调度方案好坏的主要因素。
5.1 乘客满意度评价指标
结合题目的说明以及实际生活中人们对于乘梯的要求,从乘客的角度上讲,为了使乘客的满意度尽可能地大,即乘客尽可能快地到达目的地,并在乘坐电梯的过程中保证一定程度的乘坐舒适度,设计电梯调度方案时应该考虑以下几个影响乘客满意度的主要因素:
◆乘客的平均等待时间¯t 要短; ◆乘客的平均乘梯时间¯t ´ 要短;
上述各个指标的计算方法如下,计算过程中采用了归一化思想: 1) 所有乘客的平均等待时间¯t 的计算:
t 1
=
n
i wait
n
i ∑=1
)
(
t 2
=
n
i wait
n
i ∑='
1
)(
2
2
1
t t
+
5.2 电梯能源消耗评价指标
现实生活中,衡量一个电梯的能耗要综合考虑多种因素,如电梯的加速与减速过程、电梯运行的路程、电梯能量转化效率等等。
如将这些因素全部考虑,往往会使所建立的模型过于复杂,不能得到影响能耗的主要矛盾。
基于上述考虑,并且由于题目中没有给出关于能耗的具体要求,故把电梯整个运行过程(包含上升和下降)中的停靠次数、电梯上升下降过程中走过的总的路程作为衡量电梯能耗大小的指标。
电梯的能耗的大小与电梯运行的总路程
大致呈正相关;又由于电梯每停一次,都牵涉到加速过程,而电梯加速时的耗能相对于匀速来说略有加大,因此把电梯的行走路程和停靠次数作为衡量电梯能耗的指标。
为使电梯能耗尽可能地低,应尽量使:
◆电梯上升与下降过程中的总的停靠次数尽可能地短;
◆电梯完成一天的运送任务时,所经过的总路程(s'+s'')尽可能地短;
上述各个指标的计算方法如下,计算过程中采用了归一化思想:
1)电梯停靠总次数的计算方法:
其中q表示所有 6 个电梯在上行过程中总的停靠次数,q 表示所有 6个电梯在下行过程中总的停靠次数,Q表示整个电梯群控系统在一天内完成所有的运送任
务后总的停靠次数。
2)电梯经过的总路程的计算方法:
其中表示电梯i 在上行过程中所经过的总路程,表示电梯在下行过程所
经过的总路程,S表示整个电梯群控系统在一天内完成所有运送任务后经过的总的路程。
5.3 运用层次分析法计算各个指标的权重
利用归一化原则与模糊分析的方法,将以上各个指标分别量化到以0- 1为
范围的满意度函数。
◆乘客平均等待时间t
与t负相关,我们建立 Z 型隶属度函数来反映二者之间由于乘客满意度Y
1
的关系:
满意度与t的函数图像如下:
由图可知,根据电梯运行的实际情况,我们规定:当
t1取 20 s 时,满意度为 1;当取 30s时,满意度为 0.
◆乘客的平均乘梯时间t
同样,由于乘客满意度与负相关,我们建立 Z 型隶属度函数来反映二者之间的关系:
满意度与的函数图像如下:
由图可知,根据电梯运行的实际情况,我们规定:
当取 20s 时,满意度为 1;当取 45 s 时,满意度Y 为 0.
◆电梯停靠总次数Q
根据实际生活情况可知,电梯的停靠次数Q越大,则电梯群控系统的运载效率越低,耗能会相应增加;并且随着的增大,相应的加速阶段也会随之增多,
与负造成能耗的进一步加大。
因此,可以认为对电梯停靠总次数的满意度Y
3
相关。
由此,利用 Z 型隶属度函数来反映二者之间的关系。
对电梯停靠总次数的满意度与之间的函数图像:
较小,可视为 0;当 Q 小于 170 结合实际情况,我们认为当Q大于 240 时,Y
3
时,
Y3较大,可视为 1。
◆电梯经过的总路程S
电梯的运行总路程越大,则电梯群控系统消耗的能量越多,满意度也会相对降低。
因此,从降低能耗的角度考虑,可以认为对电梯运行路程的满意度Y
与
4
负相关。
由此,利用 Z 型隶属度函数来反映二者之间的关系。
对电梯运行路程的满意度与之间的函数图像:
较小,可结果如上图所示。
结合实际情况,我们认为当S 大于 7000 时,Y
4
较大,可视为 1。
视为 0;当S 小于 3000 时,Y
4
六、电梯调度方案的建立与求解(问题一)
6.1 乘客乘梯流程分析
6.1.1. 乘客乘梯流程图
1) 乘客上行流程:
2) 乘客下行流程:
从上述流程图可以看出,乘梯流程有以下特点:1.流程流向单一,所有乘客上行和下行的流程完全相同;2.未对电梯调度方案优化之前,电梯在上行和下行时,在每一个有呼应的楼层都会停靠,容易造成时间的延长和能耗的增加;3.乘客时,如果看到有适宜的电梯,会立即排队进入该电梯,不存在人为等待的情况。
6.1.2. 对乘梯流程主要环节的描述
1) 上行阶段:
当乘客i 到达门厅时,如果此时没有电梯可以乘坐,乘客就按下呼叫按钮并等待。
从乘客i 到达门厅的时刻到电梯到达门厅之间的这段时间称为乘客i的
上行等待时间,即'
wait i;如果乘客 i 到达门厅时,恰好有电梯可以乘坐,则等待时间为 0,即'
wait i=0 。
应注意,同时到达门厅并且乘坐同一电梯的人,消耗的等待时间是一样的。
从电梯到达门厅的时刻,到乘客i 到达自己的。
乘梯时间目的楼层,中间经历的时间称为乘客i的乘梯时间,即elevator
i
包含:1.电梯启动前,电梯的开门时间、所有要坐此次电梯的乘客进入电梯的总时间、电梯的关门时间 2.电梯在到达乘客i的目标楼层之前,中途停止所消耗的时间 3.电梯到达乘客i的目标楼层后,电梯开门时间、所有在该楼层下的乘客走出电梯的时间、电梯的关门时间。
主要过程如下:
应注意,从同一楼层进入电梯的人,消耗的乘梯时间是一样的。
负责低楼层的电梯,运行周期相对较短;而负责高楼层的电梯运行周期较长。
如果两组电梯负责楼层平均分配的话,高楼层的乘客等待时间会普遍偏长。
为了均衡这种差距,我们安排负责低楼层的电梯负责的楼层数相对于高楼层来说有所增多。
在此基础上,对这两组电梯所负责的楼层数进行了多次局部调调,并对每次调整后的结果进行计算机模拟,得到与每次调整相对应的指标,通过分析和计算,我们得到:
电梯编号负责楼层单个周期所需时间/s 等效时间/s 总时间/s
1—2 2—10 164 82 6450 3—4 11--17 186 93 7780 5—6 18--22 196 98 4900
上述结果为方案一中的最优结果。
在方案二中,采取与方案一向类似的计算方法。
通过局部调整及多种方案的比较,我们得到:
电梯编号负责楼层单个周期所需时间总时间/s
1 2 3 4 5 6 100 4600
2 7 8 9 10 114 4674
3 11 12 13 122 5002
4 14 1
5 1
6 130 5460
5 17 18 19 158 4740
6 20 21 22 176 5456
6.2电梯的能耗分析
电梯的能耗计算如下:
方案一:
电梯编号负责楼层电梯能耗
1—2 2—10 794h
3—4 11--17 670h
5—6 18--22 1092h
第二种方案:
电梯编号负责楼层电梯能耗
1 2 3 4 5 6 426h
2 7 8 9 10 770h
3 11 12 13 504h
4 14 1
5 1
6 609h
5 17 18 19 640h
6 20 21 22 653h
注:h指楼层高
6.3 模型的优缺点分析
◆模型的优点:
1.由于每次模拟时,乘客的到达时间信息与楼层信息都不一样,所以不会有绝对完美的电梯群控系统调度方案。
但本模型通过多次计算取近似值,通过多次调整来求解较优解,能够较好的计算出大多数情况都会节省时间和能耗的方案。
2.通过计算机模拟,本模型能够很好的计算出各个调度方案所得到的最终结果,有利于多次计算来提高精度。
3.虽然本模型只是针对 6 部电梯、22 层楼的情况,但是该模型还可以适用于其他的楼层,适用性和推广性较强。
◆模型的缺点:
1.实际的电梯程控模型中,需要考虑的因素很多。
但是由于时间限制,本模型没能在将这些因素一一考虑,只考虑了几种比较重要的因素,所见模型较为粗略。
2.本模型只进行了一些比较常见并且较好的调度方案之间的比较,并未考虑其他较为狭隘的电梯调度方法,所以不太全面。
七、模型的改进
在现实生活中的要改进电梯群控系统时,除需考虑时间和能耗因素外,还应该考虑其他因素,如其他交通流和个别人群的满意度问题。
将这些因素考虑进去之后,尽管模型相对复杂,但是更切合实际,更加有利于实际应用。
八、参考文献
[1] Frank R.等.数学建模.叶其孝,姜启源等译.北京:机械工业出版社,2005.
[2] 姜启源.数学模型.第二版.北京:高等教育出版社,1993.
[3] 孙荣桓,李建平.排队论基础.北京:科学出版社,2002.
[4] 陆风山.排队论及其应用.长沙:湖南科学技术出版社,1984.
附件:代码
Matlab中的求极小极大化问题:
function minimax123() %在编辑窗口建立新函数
A=[1,-1,0,0,0;0,1,-1,0,0;0,0,1,-1,0;0,0,0,1,-1;0,0,0,0,1];
b={0;0;0;0;21};
Aeq=[];
beq=[];
lb=[0;0;0;0;0];
ub=[];
x0 = [1,1,1,1,1,1];
x,y = fminimax(@ffun,x0,A,b,Aeq,beq,lb,ub) %求极小极大化问题的调用格式
function [y1,y2,y3,y4,y5,y6] = ffun(x)
y1 = 16*x(1)+4;
y2 = 6*x(1)+16*x(2)+14;
y3 = 6*x(1)-10*x(2)+16*x(3)+14;
y4 = 6*x(1)-10*x(3)+16*x(4)+14;
y5 = 6*x(1)-10*x(4)+16*x(5)+14;
y6 = -10*x(1)+10*x(5)+360;
调用的那个代码:
defaultopt = struct('Display','final',...
'TolX',1e-6,'TolFun',1e-6,'TolCon',1e-6,'DerivativeCheck','off',... 'Diagnostics','off','FunValCheck','off', ...
'GradObj','off','GradConstr','off','MaxFunEvals','100*numberOfVariabl es',...
'MaxIter',400,...
'MaxSQPIter','10*max(numberOfVariables,numberOfInequalities+numberOfB ounds)',...
'Hessian','off','LargeScale','off',... % not used
'DiffMaxChange',1e-1,'DiffMinChange',1e-8,
'MeritFunction','multiobj',...
'MinAbsMax', 0,'TypicalX','ones(numberOfVariables,1)', ...
'OutputFcn',[], ...
'RelLineSrchBnd',[],'RelLineSrchBndDuration',1,'NoStopIfFlatInfeas',' off', ...
'PhaseOneTotalScaling','off');
% If just 'defaults' passed in, return the default options in X
if nargin==1 && nargout <= 1 && isequal(FUN,'defaults')
x = defaultopt;
return
end
if nargin < 10, options = [];
if nargin < 9, NONLCON = [];
if nargin < 8, UB = [];
if nargin < 7, LB = [];
if nargin < 6, Beq = [];
if nargin < 5, Aeq = [];
if nargin < 4, B = [];
if nargin < 3, A = [];
if nargin < 2
error('optim:fminimax:NotEnoughInputs', ... 'fminimax requires two input arguments.')
end,end,end,end,end,end,end,end,end
% Check for non-double inputs
% SUPERIORFLOAT errors when superior input is neither single nor double; % We use try-catch to override SUPERIORFLOAT's error message when input % data type is integer.
try
dataType = superiorfloat(x,A,B,Aeq,Beq,LB,UB);
if ~isequal('double', dataType)
error('optim:fminimax:NonDoubleInput', ...
'FMINIMAX only accepts inputs of data type double.')
end
catch
error('optim:fminimax:NonDoubleInput', ...
'FMINIMAX only accepts inputs of data type double.')
end
xnew=[x(:); 0 ];
numberOfVariablesplus1 = length(xnew);
numberOfVariables = numberOfVariablesplus1 - 1;
diagnostics = isequal(optimget(options,'Diagnostics',defaultopt,'fast'),'on'); switch optimget(options,'Display',defaultopt,'fast')
case {'off','none'}
verbosity = 0;
case 'notify'
verbosity = 1;
case 'final'
verbosity = 2;
case 'iter'
verbosity = 3;
otherwise
verbosity = 2;
end
% Set to column vectors
B = B(:);
Beq = Beq(:);
[xnew(1:numberOfVariables),l,u,msg] = checkbounds(xnew(1:numberOfVariables),LB,UB,numberOfVariables);
if ~isempty(msg)
EXITFLAG = -2;
[FVAL,MAXFVAL,LAMBDA] = deal([]);
OUTPUT.iterations = 0;
OUTPUT.funcCount = 0;
OUTPUT.stepsize = [];
OUTPUT.algorithm = 'minimax SQP, Quasi-Newton, line_search';
OUTPUT.firstorderopt = [];
OUTPUT.cgiterations = [];
OUTPUT.message = msg;
x(:) = xnew(1:numberOfVariables);
if verbosity > 0
disp(msg)
end
return
end
neqgoals = optimget(options, 'MinAbsMax',defaultopt,'fast');
% meritFunctionType is 1 unless changed by user to fmincon merit function; % formerly options(7)
% 0 uses the fmincon single-objective merit and Hess; 1 is the default meritFunctionType = strcmp(optimget(options,'MeritFunction',defaultopt,'fast'),'multiobj' );
lenVarIn = length(varargin);
% goalcon and goalfun also take: neqgoals,funfcn,gradfcn,WEIGHT,GOAL,x goalargs = 6;
funValCheck = strcmp(optimget(options,'FunValCheck',defaultopt,'fast'),'on'); usergradflag = strcmp(optimget(options,'GradObj',defaultopt,'fast'),'on'); usergradconstflag = strcmp(optimget(options,'GradConstr',defaultopt,'fast'),'on'); userhessflag = strcmp(optimget(options,'Hessian',defaultopt,'fast'),'on');
if userhessflag
warning('optim:fminimax:UserHessNotUsed','FMINIMAX does not use user-supplied Hessian.')
userhessflag = 0;
end
if isempty(NONLCON)
userconstflag = 0;
else
userconstflag = 1;
end
line_search = strcmp(optimget(options,'LargeScale',defaultopt,'fast'),'off'); % 0 means trust-region, 1 means line-search
if ~line_search
warning('optim:fminimax:NoLargeScale','Large-scale algorithm not currently available for this problem type.')
line_search = 1;
end
gradflag = 1; % always can compute gradient of goalfun since based on x hessflag = 0;
% If (user) nonlinear constraints exist, need
% either both function and constraint gradients, or not
if userconstflag
if usergradflag && usergradconstflag
gradconstflag = 1;
elseif usergradflag && ~usergradconstflag
usergradflag = 0;
gradconstflag = 0;
elseif ~usergradflag && usergradconstflag
usergradconstflag = 0;
gradconstflag = 0;
else
gradconstflag = 0;
end
else % No user nonlinear constraints
if usergradflag
gradconstflag = 1;
else
gradconstflag = 0;
end
end
% Convert to inline function as needed
if ~isempty(FUN) % will detect empty string, empty matrix, empty cell array
funfcn = optimfcnchk(FUN,'goalcon',length(varargin),funValCheck,usergradflag,u serhessflag);
else
error('optim:fminimax:invalidFUN', ...
'FUN must be a function handle of a cell array of two function handles.')
end
% We can always compute gradient since based only on xnew.
% Pass in false for funValCheck argument as goalfun is not a user function. ffun = optimfcnchk(@goalfun,'fminimax',lenVarIn+goalargs,false,gradflag);
if userconstflag % NONLCON is non-empty, goalcon is the caller to NONLCON confcn = ...
optimfcnchk(NONLCON,'goalcon',length(varargin),funValCheck,usergradco nstflag,0,1);
else
confcn{1} = '';
end
% Pass in false for funValCheck argument as goalfun is not a user function cfun = optimfcnchk(@goalcon,'fminimax',lenVarIn+goalargs,false,gradconstflag ,0,1);
lenvlb=length(l);
lenvub=length(u);
i=1:lenvlb;
lindex = xnew(i)<l(i);
if any(lindex),。