单纯形法步骤
- 格式:docx
- 大小:32.10 KB
- 文档页数:3
单纯形⽅法(SimplexMethod)最近在上最优理论这门课,刚开始是线性规划部分,主要的⽅法就是单纯形⽅法,学完之后做了⼀下⼤M算法和分段法的仿真,拿出来与⼤家分享⼀下。
单纯形⽅法是求解线性规划问题的⼀种基本⽅法。
线性规划就是在⼀系列不等式约束下求⽬标函数最⼤值或最⼩值的问题,要把数学中的线性规划问题⽤计算机来解决,⾸先要确定⼀个标准形式。
将所给的线性规划问题化为标准形式:s.t.是英⽂subject to 的简写,意思是受约束,也就是说第⼀个⽅程受到后⾯两个⽅程的约束。
对于求最⼤值问题可以将⽬标函数加负号转换为最⼩值问题。
对于求最⼤值问题可以将⽬标函数加负号转换为最⼩值问题。
其他的问题就是将实际问题中的不等式约束改为等式约束,主要⽅法是引进松弛变量和剩余变量,以及将⾃有变量转换为⾮负变量。
①对于不等式,引⼊松弛变量将其变为等式形式如下:②对于不等式,引⼊剩余变量将其变为等式形式如下:③若变量为⾃有变量(可取正、负或零,符号⽆限制),则引⼊两个⾮负变量将其表⽰如下:关于线性规划问题的解:确定了标准形式,我们就针对这个标准形式讨论⼀下线性规划问题的解。
线性规划问题的解能满⾜标准形式中约束条件的向量X的值,但只有最优解才能使⽬标函数值最⼩。
对于上⽂中的标准形式,约束矩阵A是⼀个m*n维矩阵,且m<n,所以⼀定可以从A中找到⼀个满秩m*m矩阵。
这个矩阵就称作矩阵A的⼀个基阵,矩阵A就可以写作 [B N] , 相应的解 x 也可以写成 x=(xB,xN)’,那么 Ax=b 就变为,左式两端同乘B矩阵的逆,得到。
由此引出下列名词:基阵:⾮奇异矩阵(满秩矩阵、可逆矩阵)B基向量:基阵B由m个线性⽆关的向量组成,称之为基向量基变量:向量xB各分量,与基向量对应的xB中的m个分量成为基变量⾮基变量:向量xN各分量基本解:令xN各分量为0,由得到的解称为基阵B对应的基本解基本可⾏解:当成⽴时,称基本解为基本可⾏解,因为只有满⾜所有分量不⼩于0,才符合标准形式中的约束条件(最后⼀条)。
单纯形法求解过程单纯形法是一种经典的线性规划求解方法,它是由乔治·达竞士等人在1947年提出的。
该方法的基本思想是,通过在单纯形空间内不断移动顶点的位置来寻找最优解。
单纯形法是目前广泛应用的线性规划求解方法之一,它求解线性规划问题可大大地简化计算过程。
单纯形法的求解过程包括以下几个步骤:1. 将线性规划问题转化为标准形式线性规划问题的标准形式为:$ \max_{x} \ \ c^T x $$s.t. \ Ax=b$$x\geq 0$其中,$x$是要求解的向量;$b$是一个常数向量;$A$是一个$m\times n$的矩阵;$c$是一个常数向量。
2. 初始化单纯形表因为单纯形法是通过移动顶点来寻找最优解的方法,因此需要初始化单纯形表。
单纯形表是将原始的约束条件表示为不等式形式时形成的。
例如,对于一个带有3个变量的线性规划问题,其单纯形表的形式如下:CB | X1 | X2 | X3 | X4 | RHS----|-----|-----|-----|-----|----0 | a11| a12| a13| 0 | b10 | a21| a22| a23| 0 | b20 | a31| a32| a33| 0 | b31 | z1 | z2 | z3 | 0 | 0其中,CB代表成本系数,X1、X2、X3、X4分别代表变量。
a11、a12、a13等代表矩阵A中的元素,b1、b2、b3代表矩阵b中的元素。
3. 选择进入变量和离开变量在单纯形表中,规定最后一列为等式右边的常数(RHS),即b。
在单纯形法的求解过程中,首先需要选择一个“进入变量”,即在单纯形表的第一行中,寻找一个系数为正的变量,使得将其加入目标函数后,目标函数值可以上升。
这里以X1为例,X1为进入变量。
接着,需要选择一个“离开变量”,即在单纯形表中,寻找一个使得添加X1变量后,约束条件不改变且取得约束条件中系数最小的一个变量离开。
三、单纯形法的解题步骤第一步:作单纯形表.)(1)把原线性规划问题化为标准形式;)(2)找出初始可行基,通常取约束方程组系数矩阵中的单位矩阵;)(3)目标函数非基化;)(4)作初始单纯形表.第二步:最优解的判定.(1) 若所有检验数都是非正数,即,则此时线性规划问题已取得最优解.(2) 若存在某个检验数是正数,即,而所对应的列向量无正分量,则线性规划问题无最优解.如果以上两条都不满足,则进行下一步.第三步:换基迭代.,并确定所在列的非基变量为进基变量.(1)找到最大正检验数,设为(2)对最大正检验数所在列实施最小比值法,确定出主元,并把主元加上小括号.主元是最大正检验数所在列,用常数项与进基变量所对应的列向量中正分量的比值最小者;替换出基变量,从而得到新的基变量.也就是主元所在(3)换基:用进基变量(4)利用矩阵的行初等变换,将主元变为1,其所在列其他元素都变为零,从此得到新的单纯形表;(5)回到第二步,继续判定最优解是否存在,然后进行新一轮换基迭代,直到问题得到解决为止.例3 求.解(1)化标准型:令,引进松弛变量,其标准型为求(2)作单纯形表:在约束方程组系数矩阵中的系数构成单位矩阵,故取为基变量,目标函数已非基化了,作初始单纯形表并“换基迭代”(见表6.8).表 6.8(3)最终结果:此时检验数均为非正数,线性规划问题取得最优解,最优解为标函数取得最优值.目性规划问题的最优解为:.原线目标函数的最优值为14,即.例4 用单纯形方法解线性规划问题.求.解此数学模型已是标准型了,其中约束方程含有一个二阶单位矩阵(1、2行,3、4列构成),取为基变量,而目标函数没有非基化.从约束方程找出,,代入目标函数, 经整理后,目标函数非基化了.作单纯形表,并进行换基迭代(见表6.9).最大检验数,由最小比值法知:为主元,对主元所在列施以行初等变换,基变量出基,非基变量进基.表 6.9目前最大检验数,其所在列没有正分量,所以该线性规划问题没有最优解.例5用单纯形方法解线性规划问题.求解此数学模型已是标准型了,其中约束方程含有一个二阶单位矩阵,取为基变量,而目标函数没有非基化.从约束方程找出,,代入目标函数,经整理得,目标函数已非基化.作单纯形表,并进行换基迭代(见表6.10).最大检验数,由最小比值法知:为主元,对主元所在列施以行初等变换,基变量出基,非基变量x2进基,先将主元化为1,然后再将主元所在列的其他元素化为零.表 6.10至此,检验数均为非正数,故得基础可行解.原问题的最优解为:.最优值为6,即.如果我们再迭代一次,将基变量出基,非基变量进基(见表6.11).表 6.11可得到另一个基础可行解,原问题的最优解为:,最优值仍为6,说明该线性规划问题有无穷多最优解,其最优解均为6.如何知道线性规划问题有无穷多最优解呢?这主要反映在单纯形表中.如果非基变量所对应的检验数为0,我们可对此列继续进行换基迭代,就可以得到另一个基础可行解.以此作下去,可得到许多基础可行解,即相对应的最优解有无穷多个.(4) 011 0。
单纯形法求解过程单纯形法是一种用于求解线性规划问题的迭代算法。
它是由美国数学家George Dantzig在1947年提出的。
单纯形法的目标是通过不断地沿着一些方向逼近最优解,最终找到使目标函数取得最大(或最小)值的最优解。
单纯形法的求解过程可以分为以下几个步骤:1.标准化问题:将线性规划问题转化为标准化形式。
标准化的目的是将原问题转化为一个等价问题,使得约束条件全部为等式,且目标函数的系数都为非负数。
2.设置初始解:选择一个初始可行解作为起始点。
起始点可以通过代入法求解出来,或者通过其他启发式算法得到。
初始可行解需要满足所有约束条件,即满足等式以及非负性约束。
3.检验最优性:计算当前解的目标函数值,并检验这个值是否是最优解。
如果当前解是最优解,算法终止;否则,进入下一步。
4.选择进入变量:从目标函数的系数中选择一个可以增大(最大化问题)或减小(最小化问题)目标函数值的变量作为进入变量。
选择进入变量的策略可以有多种,例如最大增益法或者随机选择法。
5.计算离基变量:选择一个出基变量并将其移出基变量集合。
离基变量的选择通常采用最小比率法,即选择使得约束条件最紧张的变量。
6.更新解:通过求解一个新的线性方程组来计算新的解,更新基变量集合和非基变量集合。
由于每次只有一个变量进基,一个变量出基,将保持可行解的性质。
7.转到步骤3:重复步骤3-6,直到找到最优解。
单纯形法的关键在于选择进入变量和离基变量,以及求解线性方程组。
进入变量的选择决定了算法在解空间中的方向,而离基变量的选择决定了算法沿着哪个方向逼近最优解。
在实际应用中,单纯形法往往需要进行大量的迭代计算,因此效率可能不是很高。
为了提高效率,可以采用一些改进的单纯形法,例如双线性法、内点法等。
总结起来,单纯形法是一种基于迭代的算法,通过每次选择一个进入变量和一个离基变量来逐步逼近最优解。
虽然它的计算复杂度较高,但是在实践中仍然是一种很受欢迎的求解线性规划问题的方法。
三、单纯形法的解题步骤第一步:作单纯形表.)(1)把原线性规划问题化为标准形式;)(2)找出初始可行基,通常取约束方程组系数矩阵中的单位矩阵;)(3)目标函数非基化;)(4)作初始单纯形表.第二步:最优解的判定.(1) 若所有检验数都是非正数,即,则此时线性规划问题已取得最优解.(2) 若存在某个检验数是正数,即,而所对应的列向量无正分量,则线性规划问题无最优解.如果以上两条都不满足,则进行下一步.第三步:换基迭代.,并确定所在列的非基变量为进基变量.(1)找到最大正检验数,设为(2)对最大正检验数所在列实施最小比值法,确定出主元,并把主元加上小括号.主元是最大正检验数所在列,用常数项与进基变量所对应的列向量中正分量的比值最小者;替换出基变量,从而得到新的基变量.也就是主元所在(3)换基:用进基变量(4)利用矩阵的行初等变换,将主元变为1,其所在列其他元素都变为零,从此得到新的单纯形表;(5)回到第二步,继续判定最优解是否存在,然后进行新一轮换基迭代,直到问题得到解决为止.例3 求.解(1)化标准型:令,引进松弛变量,其标准型为求(2)作单纯形表:在约束方程组系数矩阵中的系数构成单位矩阵,故取为基变量,目标函数已非基化了,作初始单纯形表并“换基迭代”(见表6.8).表 6.8(3)最终结果:此时检验数均为非正数,线性规划问题取得最优解,最优解为标函数取得最优值.目性规划问题的最优解为:.原线目标函数的最优值为14,即.例4 用单纯形方法解线性规划问题.求.解此数学模型已是标准型了,其中约束方程含有一个二阶单位矩阵(1、2行,3、4列构成),取为基变量,而目标函数没有非基化.从约束方程找出,,代入目标函数, 经整理后,目标函数非基化了.作单纯形表,并进行换基迭代(见表6.9).最大检验数,由最小比值法知:为主元,对主元所在列施以行初等变换,基变量出基,非基变量进基.表 6.9目前最大检验数,其所在列没有正分量,所以该线性规划问题没有最优解.例5用单纯形方法解线性规划问题.求解此数学模型已是标准型了,其中约束方程含有一个二阶单位矩阵,取为基变量,而目标函数没有非基化.从约束方程找出,,代入目标函数,经整理得,目标函数已非基化.作单纯形表,并进行换基迭代(见表6.10).最大检验数,由最小比值法知:为主元,对主元所在列施以行初等变换,基变量出基,非基变量x2进基,先将主元化为1,然后再将主元所在列的其他元素化为零.表 6.10至此,检验数均为非正数,故得基础可行解.原问题的最优解为:.最优值为6,即.如果我们再迭代一次,将基变量出基,非基变量进基(见表6.11).表 6.11可得到另一个基础可行解,原问题的最优解为:,最优值仍为6,说明该线性规划问题有无穷多最优解,其最优解均为6.如何知道线性规划问题有无穷多最优解呢?这主要反映在单纯形表中.如果非基变量所对应的检验数为0,我们可对此列继续进行换基迭代,就可以得到另一个基础可行解.以此作下去,可得到许多基础可行解,即相对应的最优解有无穷多个.(4) 011 0。
单纯形法求解线性规划的步骤1>初始化将给定的线性规划问题化成标准形式,并建立一个初始表格,它最右边的单元格都是非负的(否则无解),接下来的m列组成一个m*m的单元矩阵(目标行的单元格则不必满足这一条件),这m列确定了初始的基本可行解的基本变量,而表格中行用基本变量来表示2>最优化测试如果目标行的所有单元格都是非负的(除了最右列中代表目标函数值的那个单元格),就可以停止了,该表格代表了一个最优解,它的基本变量的值在最右列中,而剩下的非基本变量都为03>确定输入变量从目标行的前n个单元格中选择一个负的单元格(选择绝对值最大的那个)该单元格所在的列确定的输入变量及主元列4>确定分离变量对于主元列的每个正单元格,求出θ比率(如果主元格的单元格为负或为0,说明该问题是无解的,算法终止),找出θ比率最小的列,改行确定了分离变量和主元行5>建立下一张表格将主元行的所有单元格除以主元得到新的主元行,包括主元行在内的每一行,要减去改行主元列单元格和新主元行的成绩(除主元行为1外,这一步将主元列的所有单元格变成0).把主元列的变量名进行代换,得到新的单纯形表,返回第一步为求简单在本程序中,需要自己建立标准矩阵(比如加入松弛变量等工作需要用户自己完成),程序的输入有两种方式:1:指定行和列,由用户自行输入每一个元素SimpleMatrix(introw=0,int col=0);2:直接在主程序中初始化一个二维数组,然后利用构造函数SimpleMatrix(introw,int col,double **M) 来初始化和处理(本程序所用的实例用的是这种方法)程序中主要的函数以及说明~SimpleMatrix();销毁动态分配的数组.用于很难预先估计矩阵的行和列,所以在程序中才了动态的内存分配.需要重载析构函数bool Is_objectLine_All_Positive();其中row2为主元所在的行,col为主元所在的列,row1为要处理的行void PrintAnswer();数不合法"<<endl;}SimpleMatrix::SimpleMatrix(int row,int col){init(row,col);for(int i=0;i<rowLen;i++)cout<<"请输入矩阵中第"<<i+1<<"行的系数"<<endl; for(int j=0;j<colLen;j++)cin>>data[i][j];}?}SimpleMatrix::SimpleMatrix(int row,int col,double **M) {rowLen=row;colLen=col;init(row,col);for (int i=0;i<row;i++)for(int j=0;j<col;j++){data[i][j]=*((double*)M+col*i+j); ;}}SimpleMatrix::~SimpleMatrix(){if(colLen*rowLen != 0 ){for(int i=rowLen-1;i>=0;i--){if (data[i]!=NULL)delete[] data[i];}if (data!=NULL)delete[] data;}?}bool SimpleMatrix::Is_objectLine_All_Positive(){for(int i=0;i<colLen-1;i++)if(data[rowLen-1][i]<0)return false;return true;}bool SimpleMatrix::Is_MainCol_All_Negative(int col) {for(int i=0;i<rowLen;i++)if(data[i][col]>0)return false;return true;}bool SimpleMatrix::Is_column_all_Positive(int col){for(int i=0;i<rowLen-1;i++){return false;}return true;}int SimpleMatrix::InColumn(){int count=0;for(int i=0;i<colLen-1;i++){int temp=GetItem(rowLen-1,i);if(temp>=0){count++;}elsebreak;}double maxItem=fabs(GetItem(rowLen-1,count));int index_col;for(i=0;i<colLen-1;i++){double temp=GetItem(rowLen-1,i);if(temp<0){if(maxItem<=fabs(temp)){maxItem=fabs(temp);index_col=i;}}}return index_col;}int SimpleMatrix::DepartRow(int col){int index_row;int count=0;for(int i=0;i<rowLen;i++){if(data[i][col]<0)count++;elsebreak;}double minItem=data[count][colLen-1]/data[count][col]; index_row=count;double temp;for(i=0;i<rowLen-1;i++)temp=data[i][col];if(temp>0){temp=data[i][colLen-1]/temp;if(temp<minItem){minItem=temp;index_row=i;}}}return index_row;}void SimpleMatrix::MainItem_To_1(int row,int col){double temp=GetItem(row,col);pp#include <iostream>#include ""using namespace std;int main(){double M[4][7]={{5,3,1,1,0,0,9},{-5,6,15,0,1,0,15},{2,-1,1,0,0,-1,5},{-10,-15,-12,0,0,0,}}; SimpleMatrix Matrix(4,7,(double **)M);if(5))//判断是否存在最优解{bool p=();//判断主元列是否全部为正,确定是否已经取得最优解while(!p){int col=();//确定主元所在的行if(col))//确定线性规划的解是否为无解的{cout<<"线性规划问题是无界的,没有最优解"<<endl;exit(EXIT_FAILURE);}else{int mainRow=(col);//确定主元所在的行(mainRow,col);//将主元所在的行做变换,使主元变成1int i=0;while(i<()){if(i!=mainRow){(i,mainRow,col);//处理矩阵中其他的行,使主元列的元素为0i++;}elsei++;}}}for(int i=0;i<();i++)//输出变换以后的矩阵,判断是否正确处理{for (int j=0;j<();j++){cout<<(i,j)<<" ";}cout<<endl;}p=();}();}elsecout<<"线性规划无解"<<endl;return0;}。
简述单纯形法步骤单纯形法是一种用于求解线性规划问题的常用方法,它通过不断迭代来逐步逼近最优解。
下面将以简述单纯形法步骤为标题,详细介绍单纯形法的具体步骤。
1. 构建初始单纯形表单纯形法的第一步是构建初始单纯形表。
将线性规划问题的约束条件和目标函数转化为矩阵形式,并引入松弛变量,得到初始单纯形表。
初始单纯形表由约束系数矩阵、决策变量系数矩阵、右侧常数向量以及目标函数系数矩阵组成。
2. 检验是否达到最优解在初始单纯形表中,通过计算每个基变量的单位贡献值来检验是否达到最优解。
单位贡献值等于目标函数系数与对应基变量列的乘积之和减去目标函数系数。
如果所有单位贡献值均小于等于0,则达到最优解,算法结束。
否则,进入下一步。
3. 确定入基变量和出基变量在初始单纯形表中,选择单位贡献值最小且小于0的列所对应的非基变量作为入基变量。
然后,通过计算各行的比值,选择使得比值最小的行所对应的基变量作为出基变量。
4. 更新单纯形表在确定了入基变量和出基变量后,需要对单纯形表进行更新。
首先,将出基变量所在列归一化为1,然后通过高斯消元法将其他列元素消为0,得到新的单纯形表。
5. 转至步骤2经过更新后的单纯形表还不能达到最优解,需要再次进行检验。
重复步骤2至步骤4,直到所有单位贡献值均小于等于0,达到最优解为止。
6. 解读单纯形表当单纯形法得到最优解时,可以通过解读单纯形表来获得最优解的数值。
在单纯形表的最后一行,可以得到最优解的目标函数值。
而在单纯形表的非基变量列中,可以得到各个决策变量的取值。
单纯形法是一种高效的线性规划求解算法,通过不断迭代来逐步逼近最优解。
它的基本思想是通过选择合适的入基变量和出基变量,来更新单纯形表,使得目标函数值不断减小,最终达到最优解。
在实际应用中,单纯形法被广泛应用于生产计划、资源分配、运输问题等领域。
总结一下单纯形法的步骤:首先,构建初始单纯形表;然后,检验是否达到最优解;接着,确定入基变量和出基变量;然后,更新单纯形表;最后,转至步骤2,直到达到最优解。
单纯形法步骤
1. 表格形式:
将线性规划放到表格形式中。
如有需要,增加松弛变量,将不等式约束转化成等式。
所有变量都是非负的。
将目标函数约束作为最后一个约束,包括它所对应的松弛变量z。
2. 初始极点:
单纯形方法从一个已知的几点开始,通常为原点。
3. 最优性检验:
判断与当前极点相邻的焦点是否能够改进当前的目标函数值。
如果不能则当前极点是最优的;如果能改进,最优性检验将确定独立变量集合众的哪一个变量(当前取值为0)应该进入相关变量集合并可能取值变为非零。
(做法:如果所有系数都是非负的,则当前极点是最优的;否则,有些变量对应的系数为负数,则选择其中绝对值最大的负系数对应的变量,作为新的进入变量。
)
4. 可行性检验:
为了找到一个新的交点,相关变量集合中应该有一个变量退出该集合,以便让第3步中确定的变量进入相关变量集合,可行性检验将确定应该选择哪一个相关变量退出,以保证得到的交点的可行性。
(做法:用当前右端项的值,分别除以进入变量在每个等式种对应的系数,选择最小正比值对应的变量退出)
5. 旋转:
在不包含第4步中确定的退出变量的方程中,消去新进入的相关变量,形成等价的新的方程组。
然后在新的方程组中,令新的独立变量集合中的变量全部取值为0,从而基础新的相关变量集合中的所有变量的取值,确定一个交点。
(做法:在不包含退出变量的方程中,消去进入变量。
然后令新的独立变量集合中的变量,包括退出变量以及原独立变量集合中除进入变量以外的变量,全部为0)
6. 重复步骤3-5,直到找到一个最优的极点。
单纯形法步骤:
1. 给定初始点 )0(x 初始单纯形边长 a ,
α , 收缩系数 β , 延伸系数 γ 以及精度要求 ε。
2. 作出初始单纯形图
3. 找出坏点 )(h x 、好点 )(e x 计算中心点 )1(+n x 及 反射点 )2(+n x 和各点上的目标函数值
4. 比较反射点和除了坏点上的函数值,
5.
⑴. 如果反射点上的函数值比好点差,但比坏点外的其他顶点函数值好,认为反射成功,将反射点代替坏点构成新的单纯形,转7 ⑵. 如果反射点上的函数比好点还要好,说明反射点很好,可以沿此方向作延伸尝试,如果延伸点上的函数值比好点还好,则将延伸点取代坏点,形成新单纯形,转7。
反之,延伸点上函数值不如好点,说明延伸失败,但反射还是成功的,所以仍可用反射点代替坏点,然后转7
5. 如果反射点连坏点都不如,说明反射失败,那么作收缩,找出收缩点的函数值,并转
6.;如果反射点仅比坏点好,则将反射点取代坏点,然后收缩,转下一步6。
6. 如果收缩点上函数比坏点还差,说明收缩也失败,作缩小运算,形成缩小后的单纯形转7;反之(即收缩点上的函数值比坏点好),说明收缩成功,用收缩点代替坏点,形成新的单纯形转。
转下一步7。
7. 检查是否满足精度要求 ()(1)max
(()i n f x f x ε+-≤
如满足,停止迭代,否则转3,继续迭代。
%三个考察点,最优,次差,最差
best = vx(: , 1) ; fbest = vf(1) ;
soso = vx(: , n) ; fsoso = vf(n) ;
worst = vx(: , n+1) ; fworst = vf(n+1) ;
center = sum(vx(: , 1:n) , 2) ./ n ;
r = 2 * center - worst ;%反射点
fr = feval(fun , r) ;
if fr < fbest %比最好的结果还好,说明方向正确,考察扩展点,以期望更多的下降
e = 2 * r - center ; %扩展点
fe = feval(fun , e) ;
if fe < fr %在扩展点和反射点中选择较优者去替换最差点
vx(: , n+1) = e ; f(: , n+1) = fe ;
else
vx(: , n+1) = r ; vf(: , n+1) = fr ;
end
else
if fr < fsoso %比次差结果好,能够改进
vx(: , n+1) = r ; vf(: , n+1) = fr ;
else %比次差结果坏,当压缩点无法得到更优值的时候,考虑收缩
shrink = 0 ;
if fr < fworst %由于r点更优所以向r点的方向找压缩点
c = ( r + center ) ./ 2 ; fc = feval(fun , c) ;
if fc < fr %确定从r压缩向c可以改进
vx(: , n+1) = c ; vf(: , n+1) = fc ;
else %否则的话,准备进行收缩
shrink = true ;
end
else
c = (worst + center) ./ 2 ; fc = feval(fun , c) ;
if fc < fr %确定从r压缩向c可以改进
vx(: , n+1) = c ; vf(: , n+1) = fc ;
else %否则的话,准备进行收缩
shrink = 1 ;
end
end%fr < fworst
if shrink %压缩点并非更优,考虑所有点向best收缩
for i = 2:n+1
vx(: , i) = ( vx(i) + best ) ./ 2 ; vf(: , i) = feval(fun , vx(: , i)) ;
end
end %shrink
end%fr < fsoso
end %fr < fbest
[vf index] = sort(vf) ;
vx = vx(:,index) ;。