求各位大神帮助一下:matlab求解,目标与约束里含有二次,的凸规划问题,真心谢谢

求各位大神帮助一下:matlab求解,目标与约束里含有二次,的凸规划问题,真心谢谢,第1张

请把具体的问题贴出来,这样好帮助你解决问题。一般来说,凸规划问缺拿题可以用伏裂搭fmincon函数源哪来解决。fmincon函数用于求解具有目标函数和约束函数的最优化问题。

function [xv,fv] = ActivdeSet(H,c,A,b,x0,AcSet)

sz = size(A)

xx = 1:sz(1)

nonAcSet = zeros(1,1)

m = 1

for i=1:sz(1)

if(isempty(find(AcSet == xx(i),1)))

nonAcSet(m) = i

m = m + 1

else

end

end

invH = inv(H)

bCon = 1

while bCon

cl = H*x0 + c

Al = A(AcSet,:)

bl = b(AcSet)

xm = QuadLagR(H,cl,Al,zeros(length(AcSet),1))

if xm == 0

trAl = transpose(Al)

R = inv(Al*invH*trAl)*Al*invH

lamda = R*(H*xm+cl)

[lmin,index] = min(lamda)

if lmin>=0

xv = x0

fv = transpose(x0)*H*x0/2+transpose(c)*x0

bCon = 0

return

else

l = length(AcSet)

nonAcSet = [nonAcSet AcSet(index)]

[sa,sb] = sort(nonAcSet)

nonAcSet = sa

tmpAcS = [AcSet(1:(index-1)) AcSet((index+1):l)]

AcSet = tmpAcS

end

else

d = xm

mAlpha = inf

adinAcS = 0

for i=1:length(nonAcSet)

if A(nonAcSet(i),:)*d <0

alpha = (b(nonAcSet(i)) - A(nonAcSet(i),:)*x0)/(A(nonAcSet(i),:)*d)

if alpha <mAlpha

mAlpha = alpha

adinAcS = nonAcSet(i)

end

end

end

mXA = min(1,mAlpha)

x0 = x0 + mXA*d

if mXA <1

AcSet = [AcSet adinAcS]

[sa,sb] = sort(AcSet)

AcSet = sa

else

cl = H*x0 + c

Al = A(AcSet,:)

bl = b(AcSet)

trAl = transpose(Al)

R = inv(Al*invH*trAl)*Al*invH

lamda = R*(H*xm+cl)

[lmin,index] = min(lamda)

if lmin>=0

xv = x0

fv = transpose(x0)*H*x0/2+transpose(c)*x0

bCon = 0

return

else

l = length(AcSet)

nonAcSet = [nonAcSet AcSet(index)]

[sa,sb] = sort(nonAcSet)

nonAcSet = sa

tmpAcS = [AcSet(1:(index-1)) AcSet((index+1):l)]

AcSet = tmpAcS

end

end

end

end

function [xv,fv] = QuadLagR(H,c,A,b)

invH = inv(H)

F = invH*transpose(A)*inv(A*invH*transpose(A))*A*invH - invH

D = inv(A*invH*transpose(A))*A*invH

xv = F*c + transpose(D)*b

fv = transpose(xv)*H*xv/2+transpose(c)*xv


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12430160.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存