当前位置: 首页 > 知识库问答 >
问题:

《朱莉娅》中的数理逻辑

夏建木
2023-03-14

Jump是否支持在模型中直接使用数学逻辑?

我知道它支持条件指示符,但是这些条件指示符怎么样?

例如:

1-一个双条件指标是一个二进制变量,它与当前解决方案的约束的满意度和非满意度状态相关联。

δi=1⟺ 总和(j,aij.xj)

2-或约束确保至少满足两个约束中的一个。

3-If-Then-Else约束描述了一种情况,我们希望确保如果约束C1成立,那么约束C2必须成立;否则,必须保持约束C3


共有2个答案

狄心水
2023-03-14

(1)约束

δ(i)=1 ⇔ sum(j, a(i,j)) ≤ b(i)

可以表述为两个指标约束:

δ(i)=1 ⇒ sum(j, a(i,j)) ≤ b(i)
δ(i)=0 ⇒ sum(j, a(i,j)) ≥ b(i) + 0.0001
δ(i) ∈ {0,1} 

我通常去掉0.001,让问题在等式处稍微模糊。这样,解算器可以选择最好的。如果总和较长,请使用中间变量以防止重复总和。

(2)非此即彼的约束。同样的想法:

δ=1 ⇒ linear constraint 1
δ=0 ⇒ linear constraint 2
δ ∈ {0,1} 

约束1或2中的一个将被强制执行

(3) 如果有其他限制。即。

If constraint 1 then constraint 2 else constraint 3

同样类似于我们上面的内容:

δ=1 ⇒ linear constraint 1
δ=1 ⇒ linear constraint 2
δ=0 ⇒ not linear constraint 1
δ=0 ⇒ linear constraint 3

更复杂的情况可能如下所示:

δ=1 ⇒ y=b
δ=0 ⇒ y≠b

第二个含义需要使用一个额外的二进制变量拆分为两个。我把它留作一个尺码。

饶谦
2023-03-14

Julia支持在模型中直接使用数学逻辑吗?

我猜你的意思是跳这里。(JuMP是一个用Julia编写的数学优化软件包。)

跳转没有这三个约束的直接语法。

然而,它们都可以通过一些技巧来表达。

  • Mosek建模食谱是一个很好的技巧集合:https://docs.mosek.com/modeling-cookbook/mio.html.
  • 有各种关于整数程序建模的教材和讲义
    • https://download.aimms.com/aimms/download/manuals/AIMMS3OM_IntegerProgrammingTricks.pdf

    跳转文档还有一些提示。

    第(2)点是https://jump.dev/JuMP.jl/stable/tutorials/Mixed-integer线性规划/技巧和技巧/#大M-析取约束-(或)

 类似资料:
  • 在中,函数在结构上允许您取两个向量和的外积,同时为应用于每个组合的实际函数提供了许多选项。例如,创建和之间元素差异的“外部积”矩阵。朱莉娅也有类似的吗?

  • null 我的两个问题仍然存在。

  • 许多博客和手册本身都说朱莉娅是动态键入的。但是从我对手册的阅读来看,我觉得它更像是静态键入的类型推断,就像F#。 Julia是静态类型化的吗 它是动态类型的吗 我假设它是动态输入的,看来手册不太可能是错的 朱莉娅是否涉及类型推断

  • 我确信julia已经启用,并且linter也启用了(在vs代码设置中:julia>lint:Run),我在xxx.jl脚本上得到了语法高亮显示,但根本没有linter。 我在最新的vs代码+最新的Julia1.07扩展+最新的MacOSX上。我对vs代码进行了干净的安装,在安装之前清除了所有旧的相关文件夹(https://stackoverflow.com/a/53839847/11608725)

  • 我写了一个mandelbrot集,我读过关于julia集的文章,它非常相似,但到底是什么关系呢?我能用mandelbrot公式画一个julia集吗?起始参数是什么?请阅读我的mandelbrot集合代码: 我不确定mandelbrot集对于z是迭代的,julia集对于c是迭代的,这意味着什么?我需要更改代码吗? 更新:我更改了代码,但它不起作用。我的想法是从$re和$im开始,而不是从0开始: 更