You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MOSEK中如何将Expression转换为Variable并求解范数幂次约束

范数幂次建模实现方案

你不需要将Expr::sub(x_0, start_)转换为Variable类型,通过引入辅助变量+锥约束的方式即可直接完成范数幂次的建模,具体实现逻辑如下:

  • 你现有代码已经通过二阶锥约束实现了 t0 ≥ ||x_0 - start_||_2 的约束定义,若要实现范数的幂次约束,只需要额外增加一层对应幂次的锥约束即可。
  • 以最常用的2范数平方场景为例,完整实现代码如下:
Model::t M = new Model();
auto start_ = new_array_ptr<double, 1>({-4, 0, 2});
auto x_0 = M->variable(new_array_ptr<int,1>({3, 1}), Domain::unbounded());
// 辅助变量s表示2范数值,约束s ≥ ||x_0 - start_||_2
auto s = M->variable(Domain::greaterThan(0.0));
M->constraint(Expr::vstack(s, Expr::sub(x_0, start_)), Domain::inQCone());
// 辅助变量t表示范数的平方,约束t ≥ s²,通过旋转二阶锥实现
auto t = M->variable(Domain::greaterThan(0.0));
M->constraint(Expr::vstack(0.5, t, s), Domain::inRotatedQCone());
  • 如果是通用p次幂(p>1)的场景,调用Domain::inPPowerCone(p)幂锥接口即可实现t ≥ s^p的约束,不需要对已有表达式做类型转换。

内容的提问来源于stack exchange,提问作者GPrathap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 22:57:03