如何用matlab解这个优化问题

这个优化问题能用fmincon吗,如果不能用的话,粒子群算法或者遗传算法能不能解决这个问题呢

fmincon解决不了这个问题,因为约束里面有if。

粒子群和遗传算法这类优化算法什么优化问题都能解决的,就是存在时间过长和每次最优解不相等的问题。

你的模型描述有问题,以下是大致代码:

function obj = ObjectiveFun(x)
%这里是照着max来写的,如果算法是要求min,则要改动
%公式中x是二维变量,但是在优化中需要把二维变量拉为一维变量
%所以传进来的x必须是一维的,索引长度为
%nt(1) + nt(2) + ... + nt(T)
%代码只是个算法流程,没经过调试
%目标函数是双循环求和
%初始化参数
c0 = 0.37; %mu1
c1 = 0.1; %mu3
c2 = 0.9; %mu2
T = 96; %时段数
nt = zeros(T); %初始化nt
delta = zeros(T); %初始化delta
x_a = zeros(T); %初始化x_a
x_d = zeros(T); %初始化x_d
for t = 1:T %每个时段包含的x维数不一样?
nt (t) = 10; %如果x的维数不一样,则要按不一样的来设置
delta(t) = 1.0;
end
x_a(1) = 5.0;
x_d(1) = 7.0;
for t = 2:T
if (x(t - 1) < x_a(t - 1)) %模型的x_t-1这么描述有问题,与x是二维变量相矛盾,请确认模型的正确性!!!
x_a(t) = 2 * x_a(t - 1) - x(t - 1);
else
x_a(t) = x_a(t - 1);
end
if (x(t - 1) < x_d(t - 1)) %模型的x_t-1这么描述有问题,与x是二维变量相矛盾,请确认模型的正确性!!!
x_d(t) = 2 * x_d(t - 1) - x(t - 1);
else
x_d(t) = x_d(t - 1);
end
end
%x_bar_a = ?  %用于判断belta1的取值
%x_bar_d = ?  %用于判断belta2的取值
for t = 1:T %每个时段包含的x维数不一样?
for i = 1:nt(t)
r(t,i) = 0.3; %参数rti的值,也可以拉伸为一维变量,这里我延续模型中对rti的定义用二维
end
end
for i = 1:nt(t)
w(i) = 5.0; %参数wi的值
end
index = 0;
obj = 0.0;
for t = 1:T
sum_wx = 0;
for i=1:nt(t)
sum_wx = sum_wx + w(i) * x(index + i);
end
for i = 1:nt(t) %循环t---i
mu1 = c0 * x( index + i); %mu1是x_ti的函数
mu3 = c1 * ln(x(index + i) / r(t,i)); %mu3是x_ti的函数
if (sum_wx <= x_bar_a)
mu2 = ln(sum_wx / x_a(t));
elseif (sum_wx >=x_bar_d)
mu2 = ln(sum_wx / x_d(t));
else
mu2 = 0.0;
end
end
obj1 = delta(t) * (mu1 + mu2 + mu3);
obj = obj + obj1;
index = index + nt(t); %index = nt(1) + nt(2) + ... + nt(t)
end
end

追问

谢谢您的回答,请问在matlab编程上,粒子群和遗传算法哪个更简单一些

追答

大家比较认可粒子群,所以用得比较多,遗传算法用的相对少。

普遍认为粒子群算法属于智能算法,遗传算法属于进化算法。

追问

您好,再问一下,约束条件应该怎么表示呢,是将其作为罚函数添加到目标函数里面吗?如果是的话,含if的约束条件应该怎么弄成罚函数呢?

追答

是的,一般是用罚函数法。先把没有if的加起来作为目标函数的一部分,假设为f,假设if成立的部分罚函数为f1,不成立部分为f2。此时如果条件1成立,则目标函数F=f+f1,如果条件1不成立,则F=f+f2

追问

能举一个简单的例子吗,就图片中的这个优化模型,写其中一个带if的约束条件就行

追答

追答里没法贴代码,见前面的回答。

温馨提示:答案为网友推荐,仅供参考