2301_77292976 2023-11-03 10:03 采纳率: 0%
浏览 35

yalmip无法求解非线性优化目标函数。

yalmip无法求解非线性优化目标函数。

以下是目标函数:
objective = 0.5*sum((V-1).*(V-1).*100)+  0.5*sum(sum(I.*(R*ones(1,T))));   %电压偏差+子配电网有功损耗

报错:
错误使用 solvesdp_multiple (line 8)
Parts of your matrix objective is not linear (multiple solutions can currently only be obtained for linear objectives)

出错 solvesdp (line 17)
        diagnostic = solvesdp_multiple(varargin{:});

出错 optimize (line 31)
[varargout{1:nargout}] = solvesdp(varargin{:});

出错 IEEE33_2 (line 133)
result = optimize(C, objective, ops);
 

```c
>> %% 4.设目标函数

objective = 0.5*sum((V-1).*(V-1).*100)+  0.5*sum(sum(I.*(R*ones(1,T))));   %电压偏差+子配电网有功损耗

toc%建模时间
%% 5.设求解器
ops = sdpsettings('solver','fmincon','verbose',1);%设置求解器,solver为参数名,ipopt为求解器

result = optimize(C, objective, ops);

objective = value(objective)

```

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-03 21:10
    关注

    【相关推荐】



    • 这篇博客也许可以解决你的问题👉 :双层规划,主从博弈的一种求解方法:下层使用yalmip,上层使用差分进化算法,迭代直至均衡点
    • 除此之外, 这篇博客: YALMIP学习笔记-基础知识中的 约束 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      我们把一系列的约束条件串联起来,从而实现约束条件的定义.

      约束的意思就是上下文相关.可以通过下面的代码来实现对称矩阵以及正定约束:

      n = 3;
      P = sdpvar(n, n);
      C = [P>= 0];
      

      同时元素为正的正定矩阵被定义为:

      P = sdpvar(n, n);
      C = [P(:) >= 0];
      

      注意到这样的定义对于非对角线上的元素约束了两次.一个好的SDP求解器将会在与处理中检测到并减少这种模式,但是同样可以利用标准的Matlab代码手动的定义独立的元素:

      C = [triu(P) >= 0];
      

      或者

      C = [P(find(triu(ones(n)))) >= 0];
      

      基于上述的规律,一个非二次型矩阵(非对称)中的正的元素,可以利用>=操作符快速得到.

      P = sdpvar(n, 2*n);
      C = [P >= 0];
      

      约束可以通过简单的add以及拼接来进行定义:

      P = sdpvar(n, n);
      C = [P >= 0] + [P(1,1) >= 2];
      C = [P >= 0, P(1,1) >= 2];
      

      涉及到的表达式可以针对任意sdpvar对象,并且等式约束(==)可以和(<=)约束进行如下的定义:

      C = [P>=0, P(1,1)<=2, sum(sum(P)) == 10]
      

      输出显示:

      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      | ID| Constraint| Coefficient range|
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      | #1| Matrix inequality 3x3| 1 to 1|
      | #2| Element-wise inequality 1x1| 1 to 2|
      | #3| Equality constraint 1x1| 1 to 10|
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      对于两边都有的约束,可以利用double-side来定义:

      F = [0 <= P(1, 1) <= 2];
      

      严格不等式可以是不存在的,因为各种优化器求解出来的东西都需要有一个容许的误差范围,为此我们可以定义如下形式的不等式,来等价于严格不等式(带有裕量的):

      my_tolerance_for _strict = 1e-5;
      F = [0 <= P(1,1) <= 2- my_tolerance_for _strict];
      

      一些约束可以通过for循环的形式,附加到约束集中,如下所示:

      F = [0 <= P(1,1) <= 2;
      for i = 2: n-1
      	F = [F, P(i,1) <= P(2, i) - P(i,i)];
      end
      

      在定义完变量(variable)约束(constraints)之后,此时就具备了解决问题的基本条件.


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月3日

悬赏问题

  • ¥20 遥感植被物候指数空间分布图制作
  • ¥20 Github上传代码没有contribution和activity记录
  • ¥20 SNETCracker
  • ¥15 数学建模大赛交通流量控制
  • ¥15 为什么我安装了open3d但是在调用的时候没有报错但是什么都没有发生呢
  • ¥50 paddleocr最下面一行似乎无法识别
  • ¥15 求某类社交网络数据集
  • ¥15 靶向捕获探针方法/参考文献
  • ¥15 很抱歉出现错误word不能启动(24),如何解决?
  • ¥15 javascript下载网络图片