【问题标题】:Some linear constraints seem to be ignored in function NMinimize with Mathematica 8使用 Mathematica 8 的函数 NMinimize 中似乎忽略了一些线性约束
【发布时间】:2014-02-21 21:19:00
【问题描述】:

我试图通过一些线性约束最小化四个变量的非线性函数。 Mathematica 8 无法找到一个好的解决方案,在迭代中的某个点给出函数的复杂值。这意味着在该过程中没有启用一个或一些约束。这是优化功能的错误还是限制?

要最小化的函数是

ff[lxw_, lwz_, c_, d_] := - J1 (lxw + lwz) - 2 J2 c +
 T (-Log[2] - 1/2 (1 - lxw) Log[(1 - lxw)/4] - 
 1/2 (1 + lxw) Log[(1 + lxw)/4] - 
 1/2 (1 - lwz) Log[(1 - lwz)/4] - 
 1/2 (1 + lwz) Log[(1 + lwz)/4] + 1/2 (1 - d) Log[(1 - d)/16] + 
 1/8 (1 + 2 c + d - 2 lwz - 2 lxw) Log[
   1/16 (1 + 2 c + d - 2 lwz - 2 lxw)])

在哪里

T = 10;
J1 = 1;
J2 = -0.2;

是常量参数。那我试试

NMinimize[{ff[lxw, lwz, c, d],
 2 c + d - 2 lwz - 2 lxw  >= -0.999 && 
 -0.999 <= lxw <=  0.999 &&
 -0.999 <= lwz <= 0.999 && 
 -0.999 <= c <= 0.999 &&
       d <= 0.9999}, {lxw, lwz, c, d}]

结果

NMinimize::nrnum: "函数值 5.87777[VeryThinSpace]-4.87764\ I\n 在 {c,d,lwz,lxw} = {-0.718817,-1.28595,0.69171,-0.932461} 处不是实数。

如果有人能提示这里发生的事情,我将不胜感激。

【问题讨论】:

    标签: wolfram-mathematica constraints mathematical-optimization


    【解决方案1】:

    试试这个:

      Clear[ff];
      ff[lxw_, lwz_, c_, d_]  /; 2 c + d - 2 lwz - 2 lxw  >= -0.999 :=
         < your function def >
    

    如果 NMinimize 超出范围,这将导致函数无法评估。抱歉,我不能从这里测试这个.. 如果不行,请尝试在 mathematica.stackexchange.com 上询问

    除此之外,为什么要使用

    【讨论】:

      【解决方案2】:

      出现警告是因为在警告中给出的值处,ff 中的最后一项是复杂的,因为采用了负数的对数,即

      {c, d, lwz, lxw} = {
         -0.7188174745559741`,
         -1.2859482844800894`,
          0.6917100913968041`,
         -0.9324611085040573`};
      
      Log[1/16 (1 + 2 c + d - 2 lwz - 2 lxw)]
      

      -2.5558 + 3.14159 我

      1/16 (1 + 2 c + d - 2 lwz - 2 lxw)
      

      -0.0776301

      Mathematica 9 中,除了警告之外还会产生一个结果:-

      {-4.90045, {c -> 0.94425, d -> -0.315633, lwz -> 0.900231, lxw -> -0.191476}}
      

      {c, d, lwz, lxw} = {
          0.9442497691706085`,
         -0.31563295950647885`,
          0.900230825707721`,
         -0.1914760216875171`};
      
      ff[lxw, lwz, c, d]
      

      -4.90045

      【讨论】:

      • 感谢@george 和 Chris 的帮助。第一个提议没有奏效。我仍然不知道为什么该算法似乎超出了界限,但在 [(mathematica.stackexchange.com/questions/42999/… by Daniel Lichtblau. 中提出了一个令人满意的解决方法。
      • @danielstariolo - 感谢您提供后续信息。
      猜你喜欢
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多