我刚开始与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];
}
最后一部分的任何帮助??
非常感谢,
答案 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()