转换抽象的具体模型

时间:2017-01-16 10:20:04

标签: pyomo

我刚开始与Pyomo开始,我遇到了一个大问题。 我想在不使用终端的情况下运行抽象模型。我可以用一个具体的模型来做到这一点,但我在使用抽象模型时遇到了严重的问题。

我只想使用F5并运行代码。

这是我的节目:

void merge_divide(int array[],int low,int high)
{
int mid;
if(low<high)
{
 mid=(low+high)/2;
 #pragma omp parallel sections
{
#pragma omp section
{
merge_divide(array,low,mid);
}   
#pragma omp section
{
merge_divide(array,mid+1,high);
}
}
merge_conquer(array,low,mid,high);
}

    Merge method 
    void merge_conquer(int array[],int low,int mid,int high)
{
  int temp[30];
  int i,j,k,m;
  j=low;
  m=mid+1;
  #pragma omp parallel for
  for(i=low; j<=mid && m<=high ; i++)
  {
     if(array[j]<=array[m])
     {
         temp[i]=array[j];
         j++;
     }
     else
     {
         temp[i]=array[m];
         m++;
     }
  }
  if(j>mid)
  {
    #pragma omp parallel for
     for(k=m; k<=high; k++)
     {
         temp[i]=array[k];
         i++;
     }
  }
  else
  {
    #pragma omp parallel for
     for(k=j; k<=mid; k++)
     {
        temp[i]=array[k];
        i++;
     }
  }
  #pragma omp parallel for
  for(k=low; k<=high; k++)
     array[k]=temp[k];
}

最后一部分的任何帮助??

非常感谢,

1 个答案:

答案 0 :(得分:0)

我认为你的例子确实在起作用。从Pyomo 4.1开始,从求解器返回的解决方案直接存储到已解析的实例中,并且在求解器结果对象中返回 not 。之所以进行此更改,是因为在结果对象中生成解决方案的表示相当昂贵,并且不容易被人员解析。直接使用模型实例更自然。

不幸的是,结果对象报告number of solutions: 0,虽然这在技术上是正确的:结果对象没有解决方案......但是解算器部分应该指示解决方案被返回并存储到模型实例中

如果要查看解算器返回的结果,可以使用以下方法打印出模型的当前状态:

instance.display()

致电solve()后。这将报告从解算器返回的当前Var值。您需要关注stale列:

  • False表示该值不是“陈旧的”...也就是说,它是由用户设置的(在调用solve()之前),或者是从解算器返回的(之后)对solve()的调用。
  • True表示解算器未返回该变量的值。这通常是因为变量未被目标或任何启用的约束引用,因此Pyomo从未将变量发送给求解器。

[注意:display()pprint()的角色略有不同:pprint()输出模型结构,而display()输出模型< EM>状态。因此,例如,pprint()将输出约束表达式,display()将输出表达式的数值(使用当前变量/参数值)。]

修改以扩展display()&amp;的讨论pprint()