优化某些方程的所有排列

时间:2012-07-04 16:00:04

标签: optimization automation wolfram-mathematica linear-programming

我正在解决Mathematica中的优化问题。我想生成其他方程,其中变量z_k被(z_k - 1)或(z_k + 1)代替。

如何自动执行此操作并将这些方程式添加到Maximize []函数中?

谢谢!

1 个答案:

答案 0 :(得分:3)

定义

vars = {z1, z2, z3, z4};
shifts = {-1, 0, 1};

生成所有替换规则的一种方法如下:首先创建一个包含每个变量的所有可能新值的列表(Outer位),然后从每个列表中选取一个元素的所有组合(使用Tuples)。

rules = Tuples[Outer[#1 -> #1 + #2 &, vars, shifts]];

然后你可以这样做:

Union[eq12 /. rules] 

Union[]是必需的,因为某些转换不会影响eq12

或者你可以定义一个函数来一次完成所有事情:

generateAdditionalEqs[eq_, vars_, shifts_] := (eq /. 
  Tuples[Outer[#1 -> #1 + #2 &, vars, shifts]]) // Union