⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quadprogram.m

📁 计算不等式约束情况下二次规划问题
💻 M
字号:
function [Flag,Xopt]=QuadProgram(A,B,G,D,Xo)
X=Xo;Flag=0;
[flag1,x1]=Wuyueshu0(A,B,G,D);  %求无约束条件时目标函数最小值
if (flag1==1)  %无约束条件时目标函数最小值符合约束条件,最优解找到,flag1置1
Xout=x1;Flag=1; 
else      %无约束条件时目标函数最小值符合不约束条件,在约束范围内找最优解
   mm=size(A,1);   %求约束函数系数矩阵的行数,即约束数
   W=zeros(1,mm);  %有效约束集W赋初值0
   Sign=0;
   num=0;
   while(Sign==0&num<100)    %有效约束集W全为0或循环次数超过20,停止循环
      num=num+1;
     [p1,te]=JieFangCheng1(A,G,D,X,W); %求调整步长P和Lagrange乘子
     P=p1;Te=te;
     sign1=FlagZero(P);  %判断调整步长P是否全为0,全为0则Sign记1,否则记0。
     if (sign1==1)      %调整步长P全为0
        [flag1,w1,x1]=TiaoYueShu2(W,X,Te); %调整有效约束,Lagrange乘子全大于等于0,flag1记为1,否则记0
        if (flag1==1)  %flag1为1,找到最优解,结束循环
            Xout=x1;Flag=1;break; 
        else X=x1;  %flag1为0,重新赋值计算
             W=w1;
        end
     else [alpha,x1,w1]=BuChangYueShu3(A,X,B,P,W);  %调整步长P不全为0,调整x,调整有效约束
          W=w1;X=x1;
     end
   Sign=FlagZero(W);  %重新判断调整后的有效约束集W是否全为0
   end
end
%Flag=flag1;   %将flag1赋给Flag输出
if (Flag==1)   %flag1为1,将最优值输出
    Xopt=Xout;
else 
    Xopt=[];  %flag1为0,将最优值未找到,输出空集
end



  

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -