如何用matlab解这个优化问题
展开全部
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编程上,粒子群和遗传算法哪个更简单一些
追答
大家比较认可粒子群,所以用得比较多,遗传算法用的相对少。
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询