求解线性规划问题,matlab里统一使用linprog函数,其用法是
x = linprog(f,A,b,Aeq,beq,lb,ub)
并且是用来求解最小值的,所以目标函数改为最小值。
这里参数
f=[-40;-30;-10]
A=[9 7 10;06 15 1;06 15 -1]
b = [10; 32; 5]
lb = zeros(3,1)
[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb);
=======================
运行结果
x =
11111
00000
00000
531 边坡危险滑裂面研究概述
边坡稳定性分析方法中极限平衡法是工程评价和设计中最主要的也是最有效的实用分析方法,并为国家规范所采用。但是极限平衡法的最大困难在于很难找出对应于最小稳定性系数的临界滑动面(朱大勇,1997)。通常确定边坡最小稳定性系数包括两个步骤,首先对边坡体内某一滑裂面按一定计算方法确定其稳定性系数,然后在所有可能的滑裂面中找出安全系数最小的临界滑裂面,如果滑裂面曲线为函数y(x),则问题具体化为泛函F=F(y)的极值(陈祖煜,2003)。由于岩土边坡的几何形状各异,材料具有非均质性,纯解析的变分原理很难进行极值计算。
近几十年来,众多学者开展了基于最优化方法的稳定性系数极值的计算研究,具体的方法包括解析法(如负梯度法、DFP法等)、直接搜索法(枚举法、单形法、复形法、模式搜索法、共轭梯度法等)、人工智能方法(模拟退火法、遗传算法、神经网络法、蚁群算法等)。在二维垂直条分法领域,稳定性系数最小的临界滑动面的搜索问题已经得到了很好的解决,无论是圆弧还是任意状滑裂面,而进入斜条分法和三维领域,由于自由度的增加,优化算法面临着严峻的挑战(陈祖煜等,2005)。总体看来,边坡稳定性系数极值的优化算法呈现从解析法、直接搜索法向人工智能方法过渡的趋势。
以“岩体结构控制论”的观点来看,岩质边坡的稳定性主要受断层破碎带、软弱夹层、岩层层面、节理面等不连续结构面的控制,因此在稳定性计算中应充分考虑这些不连续面的分布情况和力学强度性状。Sarma法满足滑体条块间的力平衡条件,可任意条分,并考虑临界地震加速度,适用于任意形状滑面,在岩质边坡稳定性分析中运用最为广泛,本书拟以Sarma法为稳定性计算方法,在潜在滑移体的条块划分时考虑岩层层面等结构面,滑裂面为折线性形态的基础上探索岩质边坡最危险滑裂面优化和最小稳定性系数的计算问题。遗传算法(Genetic Algorithms,GA)使用自适应概率寻优,在解决多参数的全局优化中具有更高的效率,因此运用遗传算法来解决这一问题,由此提出了岩质边坡最危险滑裂面全局优化的GA-Sarma算法。
532 遗传算法理论基础
遗传算法由美国密歇根大学的Holland教授(1975)年在《自然系统与人工系统中的适应性》一书中正式提出其概念和理论框架,此后吸引了众多的研究者和探索者,相继发展和深化了该算法,其中伊利诺大学的Goldberg(1989)以专著形式对遗传算法理论及其领域的应用进行了较为全面的分析和例证。遗传算法提供了一种求解复杂系统优化问题的通用框架,广泛应用于组合优化、机器学习、自适应控制、规划设计、图像处理和模式识别、人工生命等领域。
遗传算法是借鉴生物的自然选择和遗传进化机制而开发出来的一种全局优化自适应概率搜索算法。它使用群体搜索技术,通过对当前群体施加选择、交叉、变异等一系列遗传 *** 作,产生新一代的群体,并逐步使群体进化到包含或接近最优解的状态。它的主要特点是群体搜索策略和群体中个体之间的信息交换,搜索不依赖于梯度信息,它尤其适用于处理传统搜索方法难于解决的整体极值和非线性问题的求解。
遗传算法是在给定初始群体和遗传 *** 作的前提下,通过迭代实现群体的进化,它包括三个基本 *** 作:选择、交叉和变异(许国志等,2000)。候选解(目标函数)是模拟生物体的染色体,对待求问题编码而形成,组成一个固定规模的群体。最初候选解的群体是随机生成的,每一个染色体代表给定优化问题的一个可能的解,组成染色体的每一个基因代表一个待优化的参数。使用目标函数可计算一个染色体对应的目标函数值(稳定性系数),进而可以确定每一个染色体的适应度(稳定性系数的函数)。染色体通过迭代而进化,每一个迭代步骤中,父代群体中的两个染色体相互结合(交叉 *** 作)或直接改变父代群体中的某个染色体(变异 *** 作)形成子代群体中染色体。从父代和子代中选择某些适应度大的染色体而淘汰适应度小的染色体(选择 *** 作),可以形成新一代的染色体。适应度最大(稳定性系数最小)的染色体,最有可能被选择并用于产生下一代染色体,这一迭代过程直到寻找到最优解为止(陈祖煜,2003)。遗传算法的流程(王小平等,2000)如图531所示。
图531 遗传算法的基本流程
遗传算法在边坡稳定性分析领域已得到运用并备受关注。如肖传文等(1998)应用遗传算法进行Bishop圆弧滑裂面的优化分析,Goh(1999)运用遗传算法进行斜条分法临界滑动模式的搜索,张宏亮等(2003)应用上限解斜条分法和遗传算法确定边坡的最小稳定性系数,陈昌富等(2003)基于水平条分法和遗传算法计算水平向成层边坡在地震作用下的稳定性,何则干等(2004)利用遗传模拟退火算法结合瑞典圆弧法寻找边坡最危险滑裂面,吕文杰等(2005)用遗传算法配合单纯形法优化提出边坡圆弧滑动稳定分析通用算法。这些研究提出了一些好的思路,并取得了满意的结果,但算法或基于圆弧滑动假设,或未能充分考虑岩体结构面的控制,现在仍处于未成熟阶段,而且在当前国内外应用较广泛的一些边坡稳定分析软件尚未实现真正意义的全局优化算法。
533 Sarma法基本原理
如图532所示,将滑体沿任意条分为n个条块。作用在i第条块上作用力包括重力Wi,条块底面的作用力Ni,Ti,以及条块两侧的作用力Ei、Xi、Ei+1、Xi+1。在第i条块施加一个体积力KcWi,假定在其作用下,滑体处于极限平衡状态,其中Kc是临界加速度系数,边坡的稳定性系数K是Kc为零时的相应值(Sarma,1979)。根据条块垂直和水平方向力的平衡,可以得到:
内外动力地质作用与斜坡稳定性
图532 Sarma法计算简图
内外动力地质作用与斜坡稳定性
根据mohr-coulomb破坏准则,在条块底面、左侧和右侧界面上有:
内外动力地质作用与斜坡稳定性
将式(533)、(534)、(535)代入式(531)、(532),消去Ti、Xi、Xi+1和Ni,可以得到:
内外动力地质作用与斜坡稳定性
由此循环式,不考虑外荷载作用,即边界条件E1=En+1=0,可以求得:
内外动力地质作用与斜坡稳定性
式(537)中
内外动力地质作用与斜坡稳定性
内外动力地质作用与斜坡稳定性
式中:
Ui、PWi为第i条块底面和侧面上的水压力;cbi、φbi为第i条块底面上的粘聚力和内摩擦角;csi、φsi、csi+1、φsi+1为第i条块第i、i+1侧面上的粘聚力和内摩擦角;δi、δi+1为第i条块第i侧面和第i+1侧面的倾角(以铅直线为起始线,顺时针为正,逆时针为负);αi为第i条块底面与水平面的夹角;bi为第i条块底面水平投影长度;di、di+1分别为第i条块第i侧面和第i+1侧面的长度。
534 GA-Sarma算法原理
GA-Sarma算法的基本思想是滑裂面为折线形,其扩展方向追踪顺坡向节理面或者其他不连续结构面,潜在滑体以岩层层面等结构面为条分边界,用Sarma极限平衡法计算稳定性系数,以遗传算法优化最危险滑裂面的位置。
5341 目标函数的建立
如图533所示,当滑裂面由M点向坡顶扩展时的可能的路径有无数条,在此假设滑裂带在N点向上扩展时,滑裂路径的可能方向用γ表示,γ是滑裂路径与X轴正方向之间的夹角。若坡体内存在顺坡向不连续结构面(如节理面、软弱夹层等),则滑裂面路径沿不连续结构面扩展。
图533 边坡滑移路径局部模型示意图
这样,根据Sarma算法有:
内外动力地质作用与斜坡稳定性
确定了γi(i=1,2,…,n)之后,也就确定了滑裂路径,沿该路径可计算出稳定性系数。这样问题就转化成如何搜索γi使得式(5320)的值最小。将γi视为参数,则参数的数量与折线形滑移面的段数的数量一致,这是一个多变量函数的极值问题。
5342遗传算法的构造
(1)决策变量、约束条件及目标函数
决策变量就是参数γi的数量,与折线形滑面的段数一致。γi是滑裂路径的扩展方向,因此其取值范围为[0,90°]。目标函数就是:
内外动力地质作用与斜坡稳定性
因此,用遗传算法求解滑裂面的最小稳定性系数,是要找到一个由所有滑动方向构成的滑移路径使f(γi)的值最小。
(2)编码及解码方法
将函数优化问题的解空间转换成遗传算法的搜索空间的过程称为编码(Encoding)二进制编码方法具有编码、解码过程容易 *** 作以及交叉、变异等遗传算子便于实现等优点,是遗传算法中最常用的一种编码方法。
因为γi的取值范围为[0,90°],将每个变量的二进制编码位数取10位,则γi的取值精度约为01°。将分别代表变量γi的二进制编码串连接在一起,设滑裂面的折线段数为n,则滑裂路径组成一个共10n位的二进制编码长串,它代表目标函数优化问题的染色体编码。
解码(Decoding)是编码的逆过程,将编码所表示的数值从搜索空间转换到解空间首先将10n位长的二进制编码串分拆成n个分别表示不同变量的二进制编码串,然后把它们分别转换成相应的十进制代码。
(3)适应度函数
适应度函数(Fitness function)是遗传算法进化的指导准则,用来度量个体在优化过程中可能达到或接近于最优解的优良程度。遗传算法按照群体中各个个体的适应度大小来确定个体遗传到下一代的概率,适应度较高的个体比适应度较低的个体遗传到下一代的概率就相对大一些。
稳定性系数最小的滑裂面是一个求目标函数f(γi)的全局最小值问题,因此,适应度函数F(γi)由f(γi)经以下转换得到:
内外动力地质作用与斜坡稳定性
这样F(γi)的物理意义代表着稳定性系数值最小的f(γi)的路径的适应度最大,在遗传与变异过程中最有可能被保存下来。
(4)遗传与变异
选择(Selection)算子在遗传算法中以个体的适应度评价为基础来对群体中的各个个体进行优胜劣汰 *** 作。目的是为了保持基因稳定、增强全局收敛能力和计算效率。在采用回放式随机采样方式的比例选择方法中,个体被选中的概率与其适应度大小成正比。设群体的规模大小为M,第i个个体的适应度Fi由式(5322)得到,则个体i被选中的概率Pi为:
内外动力地质作用与斜坡稳定性
交叉(Crossover)算子在遗传算法中起着重要的作用,是产生新个体的主要方法。算法中采用了如图534所示的单点交叉方法。
图534 交叉 *** 作
变异(Mutation)算子相对交叉算子来说,只是产生新个体的一种辅助方法,但也不可忽视,因为它可以改善遗传算法的局部搜索能力,保持群体中个体的多样性,避免出现早熟现象。为了不破坏太多已有的较好模式,变异概率Pi的值取得较小。变异 *** 作如图535 所示:
图535 变异 *** 作
(5)保留最优个体的灾变策略
在遗传算法的运行过程中,由于交叉算子产生的新遗传特性不足,群体中所有个体的适应度会出现趁向于相同的现象,使得个体多样性丧失,遗传算法的演化进程陷入僵局。为摆脱这种状况,多次增大变异概率Pi的值,但效果不明显。于是引入灾变策略(Catas-trophe strategy),模仿残酷的自然灾变现象,对群体进行大规模的消亡和产生新的后代的 *** 作,以达到产生新的优良个体的作用。而在实行灾变策略的同时,为了不使已有的最优个体(Elitist)消失,在新的群体生成时保留最优个体至下一代,其他的个体则随机产生。
535 实例运用及验证
如图536所示,一个岩质边坡,高度H=30m,坡脚ε=60°,岩层倾角β=40°。边坡中随机分布有不连续结构面。岩体的重度γ=25kN/m3,岩体粘聚力和内摩擦角分别为150kPa、20°;岩层面粘聚力和内摩擦角分别为100kPa、18°;不连续结构面粘聚力和内摩擦角分别为100kPa、10°。以GA-Sarma算法计算边坡最危险滑裂面及其稳定性系数。
5351 计算过程
Sarma法中的安全系数值K是在Kc=0的条件下的相应值,方程Kmin(式5321)是一个隐式方程,直接编程求解较为困难,因此GA-Sarma算法用C语言编程并基于Matlab软件平台实现。在上述算例中,坡体中含顺坡向不连续结构面,因此在滑裂面搜索时约束路径必通过PQ,即在该范围的路径编码中变量γi是事先确定的。计算中选取群体规模M100,运行代数为300。当遗传算法在连续30代的运行期间,K值保持不变时,灾变程序开始执行。
图536 计算实例示意图
5352 计算结果
图537中记录了实行保留最优的灾变策略情况下群体中所有路径对应到K的平均值(蓝色点线)和最小值(红色实线)的变化过程。纵轴代表稳定性系数值,由式(5321)表示的目标函数决定。为清晰起见,图537中只表示了运行代数为300的情况,实际的运行代数为1000,期间灾变程序执行了16次,K值从155下降至11996。也就是说,当灾变程序执行后,K的平均值的变化剧烈,而最小值的变化则是稳定下降,但变化幅度不明显。由GA-Sarma法计算的边坡最小稳定性系数为11996,相应的最危险滑裂面如图538所示。
图537 遗传算法迭代过程中稳定系数的变化情况
图538 计算所得的最危险滑裂面路径
5353 结果验证
为了验证GA-Sarma算法的可靠性和合理性,用国内外广泛应用的边坡稳定性计算商业软件Slide50对算例进行计算。图539表示的是以PQ为滑移面的基准位置进行非圆弧滑动搜索计算的结果,其中红色箭头表示的是滑移面向左右方向扩展的角度范围,阴影块体为最危险滑移体。图5310表示的是以上述GA-Sarma算法求取得最危险滑裂面为指定滑移路径下的计算结果。表531列举了GA-Sarma算法和Slide软件中其他极限平衡法的稳定性系数值。
图539 以PQ为基准线搜索计算结果
图5310 以GA-Sarma算法的最优路径为滑移面的计算结果
表531 算例稳定性系数不同方法的计算结果对照表
表531结果表明:GA-Sarma算法基于折线形的滑裂面优化计算方法所得的滑移路径更符合岩质边坡的实际破坏失稳模式,稳定性系数小于其他计算方法的全局搜索方法;而相同滑移路径下,GA-Sarma算法由于考虑了层间力作用的平衡,安全系数略小于其他计算方法,但差值很小,则证明了GA-Sarma算法数学模型的可靠性。
刚好我也做了这个,给你参考哈
function x=lindual(c,A,b)
[n1,n2]=size(A);
A=[A,eye(n1)];c=[-c,zeros(1,n1)];
x1=[zeros(1,n2),b'];lk=[n2+1:n1+n2];
while(1)
x=x1(1:n2);
s1=[lk',b,A]
c
x1
cc=[];ci=[];
for i=1:n1
if b(i)<0
cc=[cc,b(i)];
ci=[ci,i];
end
end
nc=length(cc);
if nc==0
fprintf('达到最优解');
break
end
cliu=cc(1);
cl=ci(1);
for j=1:nc
if abs(cc(j))>abs(cliu)
cliu=cc(j);
cl=j;
end
end
cc1=[];ci1=[];
for i=1:n1+n2
if A(cl,i)<0
cc1=[cc1,A(cl,i)];
ci1=[ci1,i];
end
end
nc1=length(cc1);
if nc1==0
fprintf('无可行解');
break
end
cliu=c(ci1(1))/cc1(1);
cl1=ci1(1);
for j=1:nc1
if c(ci1(j))/cc1(j)<cliu
cliu=c(ci1(j))/cc1(j);
cl1=ci1(j);
end
end
b(cl)=b(cl)/A(cl,cl1);
A(cl,:)=A(cl,:)/A(cl,cl1);
for k=1:n1
if k~=cl
b(k)=b(k)-b(cl)A(k,cl1);
A(k,:)=A(k,:)-A(cl,:)A(k,cl1);
end
end
c=c-c(cl1)A(cl,:);
x1(lk(cl))=0;
lk(cl)=cl1;
for kk=1:n1
x1(lk(kk))=b(kk);
end
x=x1(1:n2);
end
验证p62运筹学
min ω=2x1+3x2+4x3
x1+2x2+x3≥3
2x1-x2+3x3≥4
x1,x2,x3≥0
检验
format rat
c=[2 3 4];A=[-1 -2 -1;-2 1 -3];b=[-3;-4];
x=lindual(c,A,b)
以上就是关于matlab单纯形法求解线性规划 用MATLAB 编个程序全部的内容,包括:matlab单纯形法求解线性规划 用MATLAB 编个程序、岩质边坡最危险滑裂面的GA-Sarma 算法、高分求 matlab 对偶单纯形法 程序 ,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)