蒙特卡洛非线性规划求解

问题遇到的现象和发生背景

用蒙特卡洛随机求解一个非线性规划

用代码块功能插入代码,请勿粘贴截图

目标函数和约束条件
function [f,g,h] = mengte(w)
x=[241.2,44.8,31.5,16.6,0,0];c=[0.2,0.3];
ub=[0.3,0.4,0.4,0.3,0.2,0.2,0.1,0.2,0.3,0.6,0.4,0.2,0.1,0.1,0.1,0.4,0.7,0.25];
a=w(1)x(1)+c(1)(w(2)*x(1)+x(2));
b=w(8)a+c(2)(w(9)*a+w(3)x(1)+x(3));
f=2
(w(16)*b+w(10)*a+w(4)x(1)+x(4))+5(w(17)*b+w(11)*a+w(5)x(1)+x(5))+3(w(18)*b+w(12)*a+w(6)x(1)+x(6));
g=[70-(1-c(1))
(w(2)x(1)+x(2))
w(1)-ub(1)
w(2)-ub(2)
w(3)-ub(3)
w(4)-ub(4)
w(5)-ub(5)
w(6)-ub(6)
w(7)-ub(7)
w(8)-ub(8)
w(9)-ub(9)
w(10)-ub(10)
w(11)-ub(11)
w(12)-ub(12)
w(13)-ub(13)
w(14)-ub(14)
w(15)-ub(15)
w(16)-ub(16)
w(17)-ub(17)
w(18)-ub(18)
70-(1-c(2))
(w(9)*a+w(3)*x(1)+x(3))
80-(w(16)*b+w(10)*a+w(4)*x(1)+x(4))
50-(w(17)*b+w(11)*a+w(5)*x(1)+x(5))]
h=[sum(w(1:6))-1
sum(w(7:12))-1
sum(w(13:18))-1];
end

主文件
rng('shuffle')
p0=0;w0=zeros(1,18);
tic % 计时开始 呼应上文的clock
for i = 1:10^6
w=rand(1, 18);
[f,g,h] = mengte(w); % 调用mengte()函数
if all(g<=0)% 使用约束函数进行限制
if all(h==0) % all()函数 对向量/矩阵所有项进行相同的逻辑比较,并返回bool值
if p0 < f % 用p0储存上一个的f值,并通过比较来得到最大的f
w0 = w; % 记录目前达到最大值的x值
p0 = f; % 记录目前的最大值
end
end
end
end
w0,p0

运行结果及报错内容

w0 =

 0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

p0 =

 0
我的解答思路和尝试过的方法

我想问下是程序的问题还是限制条件太紧了,用蒙特卡洛也是为了找一个初始解