数组中找到解决方案,满足给定约束和期望输出值

2视图(30天)
大家好,
我处理的问题是,我有一个数组正矢测量:
EV = [0 2 2 6 2 8 4 8 6 4 8 10 10 6 8 10 4 18 0 6 4 8 9 4 4 6 16 4 2 2 4 6 -14 1 2 2 -12 -18 -10 -14 -14);
和我需要优化这个数组与减少峰值产生平滑结果这将是第二个数组。然而,这第二个数组需要有一定的规则和随机顺畅不工作因为以下方程支配其他参数计算:
d (1,1) = 0;
ED (1,1) = 0;
米(1,1)= 0;
(1,1)= 0;
d (i) = DV(我)电动汽车(1,);
ED (i) = ED(1张)+ d(1张);
M (i) = ED(我)+ M(1张);
(我)= 2 * (ED(1张)+ DV(1张)电动汽车(1张)+ M(1张);
DV是第二个(优化/平滑)我需要创建数组。个人的结果参数依赖于之前的值。举个例子:
ED (1、2) = ED (1,1) + d (1, 1)
M (1、2) = ED (1、2) + M (1, 1)
(1、2)= 2 * (ED (1,1) + DV(1, 1)电动汽车(1)+ M (1,1))
我需要创建第二个数组的最后两个值,这样会是0:
(42)= 0 & &年代(41)= 0;
我的方法:
我第一次创建DV从6个移动平均的电动汽车提供了一个很好的基础和-82年代末。然后我想计算所有排列接近这个数组通过加1,减去1的值不会改变。我相信这将调整结果,然后过滤的结果能给两个0。然而,随着42位置和3个可能的值,这是不可行,所以我选择了12个位置数组和3的中间值。这创造了约一百万个组合,其中一些是非常接近我所需要的东西,最后我的年代是我倒数第二年代0和6。然而,我无法计算排列由于内存和时间约束。有没有其他方法如opitmization来解决这个问题,我可以使用?
简介:
创建第二个数组,结果在最后和第二位置0。
谢谢你的帮助

接受的答案

艾伦·韦斯
艾伦·韦斯 2021年4月29日
我不知道如果这是你想要的,但具体问题具体分析的方法在优化工具箱™容易处理您的方程。
EV = [0 2 2 6 2 8 4 8 6 4 8 10 10 6 8 10 4 18 0 6 4 8 9 4 4 6 16 4 2 2 4 6 -14 1 2 2 -12 -18 -10 -14 -14) ';
%的电动车是一个列匹配的其他变量
%创建优化变量
N =长度(EV);
d = optimvar (' d 'N);
ED = optimvar (“ED”N);
M = optimvar (“米”N);
S = optimvar (“年代”N);
DV = optimvar (“DV”N);
%建立约束
cons1 = d = = DV -电动汽车;
consd0 = d (1) = = 0;
consED0 ED (1) = = = 0;
consM0 = M (1) = = 0;
consS0 = S (1) = = 0;
idxnot1 = 2: N;
缺点ED (idxnot1) = = = ED (idxnot1 - 1) + d (idxnot1 - 1);
consMnot1 = M (idxnot1) = = ED (idxnot1) + M (idxnot1 - 1);
consSnot1 = S (idxnot1) = = 2 * (ED (idxnot1 - 1) + DV (idxnot1 - 1) - EV (idxnot1 - 1) + M (idxnot1 - 1));
%创建问题,把约束问题
概率= eqnproblem;
prob.Equations。cons1 = cons1;
prob.Equations。consd0 = consd0;
prob.Equations。consED0 = consED0;
prob.Equations。M0 = consM0;
prob.Equations。S0 = consS0;
prob.Equations。缺点=缺点;
prob.Equations。consMnot1 = consMnot1;
prob.Equations。consSnot1 = consSnot1;
prob.Equations。consSend = S (end-1:结束)= = (0,0);
%解决问题
[溶胶,fval eflag、输出]=解决(问题);
线性方程问题是欠定的。方程将在最小二乘意义上解决。使用lsqlin解决问题。
%视图DV变量
disp (sol.DV)
0 2 2 6 2 8 4 8 6 4 8 10 10 6 8 10 4 18 0 6 4 8 9 4 4 6 16 4 2 2 4 6 -14 1 2 2 0 -12 -22 -28 -18
艾伦·韦斯
MATLAB数学工具箱文档
13个评论
艾伦·韦斯
艾伦·韦斯 2021年9月23日
编辑:艾伦·韦斯 2021年9月23日
既然R2021b已经被释放,我可以告诉你我是如何能够得到结果我以前相关的“魔术”。The point is that in R2021b, 遗传算法 接受线性等式约束。
EV = [0 2 2 6 2 8 4 8 6 4 8 10 10 6 8 10 4 18 0 6 4 8 9 4 4 6 16 4 2 2 4 6 -14 1 2 2 -12 -18 -10 -14 -14);
N =长度(EV);
d = optimvar (' d ',1,N,“类型”,“整数”,“下界”,-20,“UpperBound”,20);
ED = optimvar (“ED”,1,N,“类型”,“整数”,“下界”,-25,“UpperBound”25);
M = optimvar (“米”,1,N,“类型”,“整数”,“下界”,-40,“UpperBound”,40);
S = optimvar (“年代”,1,N,“类型”,“整数”,“下界”,-80,“UpperBound”,20);
DV = optimvar (“DV”,1,N,“类型”,“整数”,“下界”,-50,“UpperBound”,50);
概率= optimproblem;
idxnot1 = 2: N;
prob.Constraints。cons1 = d = = DV -电动汽车;
prob.Constraints。consd0 = d (1) = = 0;
prob.Constraints。consED0 ED (1) = = = 0;
prob.Constraints。M0 = M (1) = = 0;
prob.Constraints。S0 = S (1) = = 0;
prob.Constraints。缺点ED (idxnot1) = = = ED (idxnot1 - 1) + d (idxnot1 - 1);
prob.Constraints。consMnot1 = M (idxnot1) = = ED (idxnot1) + M (idxnot1 - 1);
prob.Constraints。consSnot1 = S (idxnot1) = = 2 * (ED (idxnot1 - 1) + DV (idxnot1 - 1) - EV (idxnot1 - 1) + M (idxnot1 - 1));
prob.Constraints。consSend = S (end-1:结束)= = (0,0);
概率。目标= 12 *总和(DV (idxnot1) - DV (1: (n - 1))) ^ 2) + 1/2 *总和((EV - DV) ^ 2);
rng默认的
选择= optimoptions (“遗传算法”,“PlotFcn”,“gaplotbestf”,“显示”,“没有”,“MaxGenerations”,100);
[溶胶,fval eflag、输出]=解决(概率,“选项”、选择);
disp (sol.DV)
1到11
0 3.0000 3.0000 3.0000 3.0000 5.0000 5.0000 5.0000 6.0000 7.0000 7.0000
12到22
8.0000 9.0000 9.0000 8.0000 9.0000 9.0000 8.0000 5.0000 6.0000 4.0000 6.0000
23 - 33
0 6.0000 6.0000 6.0000 6.0000 5.0000 5.0000 -2.0000 -5.0000 -6.0000 -4.0000
34在42
-3.0000 -3.0000 -5.0000 -8.0000 -11.0000 -14.0000 -12.0000 -9.0000 -8.0000
阴谋(1:N,电动汽车,“b -”1:N, sol.DV的r -)
艾伦·韦斯
MATLAB数学工具箱文档

登录置评。

更多的答案(0)

下载188bet金宝搏

社区寻宝

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

开始狩猎!

翻译的