如何解决绝对问题优化

55视图(30天)
Jayachandra Malavatu
Jayachandra Malavatu 约3小时前
评论道: Torsten 2分钟前
你好,我想要解决一个二次优化问题 (概率。目标= ((PgridV) ^ 2)总和;) 限制了我有一个变量中,我需要找到的绝对值 (Pb1dc) 。所以我介绍一个名为“K”的变量。K - K < = Pb1dc < =;
  • 通知你:我用absoulte价值以下约束(prob.Constraints.loadBalanceAC = Pb1 = = Pb1dc - (0.05 * K),)
MATLAB解决exactely显示我想要的。它工作得很好。
然而,当我想和小修改之后(恰克的目标函数 概率。目标= ((PgridV-M) ^ 2)和 ;)M是一个参考信号(Pload的意思),当我运行仿真
绝对价值(K)没有得到exactley来说意味着什么。它显示随机值(K =绝对( (Pb1dc))
clc
清晰的所有
Pload = [0, 1, 3, 4、2、6、9、10; 2, 4];%的负载
N = 10;
M =意味着(Pload) + 0 (N, 1);
Einit1 = 0.5;%初始能量
E = 0 (N, 1);
Emin1 = 0;%迷你能源
Emax1 = 3;
dt = 1;
概率= optimproblem;
PgridV = optimvar (“PgridV”N下界的0,“UpperBound”,20);%电网电力
Pb1 = optimvar (“Pb1”N下界的,1“UpperBound”1);%交流电源
Pb1dc = optimvar (“Pb1dc”N下界的,1“UpperBound”1);%直流电源
K = optimvar (“K”N下界的,0);%的绝对(Pb1dc)
EbattV1 = optimvar (“EbattV1”N下界的Emin1,“UpperBound”,Emax1);%的能量
概率。ObjectiveSense =“最小化”;
%概率。目标= (k . ^ 2)之和;
%概率。目标= ((PgridV) ^ 2)总和;
概率。目标= ((PgridV-M) ^ 2)总和;
% 1约束
prob.Constraints。energyBalance = optimconstr (N);
prob.Constraints.energyBalance (1) = EbattV1 (1) = = Einit1-Pb1dc (1) * dt;%普洛斯constanat
prob.Constraints.energyBalance (2: n - 1) = EbattV1 (2: n - 1) = = EbattV1 (1: n - 2) -Pb1dc dt (2: n - 1) *;
prob.Constraints.energyBalance (N) = EbattV1 (N) = = Einit1;
% K限制为Pb1dc modulous
prob.Constraints.kbalance1 = optimconstr (N);
prob.Constraints.kbalance1 (1: N) = - k (1: N) < = Pb1dc (1: N);
prob.Constraints.kbalance2 = optimconstr (N);
prob.Constraints.kbalance2 (1: N) = Pb1dc (1: N) < = K (1: N);
%负载平衡
prob.Constraints.loadBalance = PgridV + Pb1 = = Pload;
%损失项
prob.Constraints.loadBalanceAC = Pb1 = = Pb1dc - (0.05 * K);
选择= optimoptions (prob.optimoptions,“显示”,“最后一次”);
%选项= optimoptions (prob.optimoptions、“算法”、“内点”);
(价值观、fval exitflag) =解决(概率,“选项”选项)
使用lsqlin解决问题。最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
值=结构体字段:
EbattV1(10×1双):凯西:[10×1双]Pb1:[10×1双]Pb1dc:[10×1双]PgridV:(10×1双)
fval = 57.4575
exitflag =
OptimalSolution
%解析optmization结果
如果exitflag < = 0
PgridV = 0 (N, 1);
Pb1 = 0 (N, 1);
Pb1dc = 0 (N, 1);
EbattV1 = 0 (N, 1);
K = 0 (N, 1);
其他的
PgridV =值。PgridV;
Pb1 = values.Pb1;
Pb1dc = values.Pb1dc
EbattV1 = values.EbattV1;
K = values.K
结束
Pb1dc = 10×1
-0.6434 -0.6204 -0.6701 0.1224 -0.6886 1.0000 1.0000 1.0000 -0.8624 -0.0018
K = 10×1
7.1327 7.5914 6.5986 4.4490 6.2283 1.0000 1.0000 1.0000 2.7522 1.9640
4评论
Torsten
Torsten 2分钟前
编辑:Torsten 不到一分钟前
上面列出的K值怎么了?
他们不是定义为绝对值Pb1dc的约束。
你的约束条件是abs (Pb1dc) < = K。

登录置评。

答案(1)

Jayachandra Malavatu
Jayachandra Malavatu 约2小时前
15个评论
Torsten
Torsten 2分钟前
是的。介绍了非线性约束lsqnonlin最近。

登录置评。

下载188bet金宝搏


释放

R2022a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!