首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OMPython/OpenModelica参数不可更改

OMPython/OpenModelica参数不可更改
EN

Stack Overflow用户
提问于 2022-11-18 15:29:57
回答 1查看 46关注 0票数 0

我已经用建筑物库在OpenModelica中建模了一座建筑物。我正在使用OMPython和OMCSessionZMQ来设置和优化Python中的OpenModelica参数。

我刚刚发现对于一些参数isChangeable = False,即mSenFac,我不能使用mod.setParameters( )来设置这些参数。

mSenFac可以在Buildings.Fluid.MixingVolumes.MixingVolume中找到,后者后来在Buildings.ThermalZones.ReducedOrder.RC中使用。

相反,有人建议我使用mod.sendExpression("setParameterValue(BuildingModels.oneElement,thermalZoneOneElement.mSenFac,5),parsed = False)“并使用mod.buildModel( ) API重新构建模型。

  • BuildingModels.oneElement是我的模型,name
  • thermalZoneOneElement.mSenFac是我想要设置的参数。

但是,这种方法对我也不起作用,我不知道为什么。

我需要能够在优化算法中的迭代中设置mSenFac。如果有人能回答以下问题,我将不胜感激:

mSenFac

  • Is的isChangeable = True是否有可能使用OMPython?

设置mSenFac

向你问好,法纳兹

EN

回答 1

Stack Overflow用户

发布于 2022-11-22 08:59:06

运行此脚本:

代码语言:javascript
复制
loadString("
package BuildingModels
  model oneElement
    Integer mSenFacParameter = 1;
    Buildings.ThermalZones.ReducedOrder.RC.OneElement thermalZoneOneElement;
  end oneElement;
end BuildingModels;
"); getErrorString();

list(BuildingModels.oneElement); getErrorString();

// using setParameterValue can only set top level parameters
setParameterValue(BuildingModels.oneElement, mSenFacParameter, 6); getErrorString();

list(BuildingModels.oneElement); getErrorString();

// using setComponentModifierValue can set component modifiers
setComponentModifierValue(BuildingModels.oneElement, thermalZoneOneElement.mSenFac, $Code(=6)); getErrorString();

list(BuildingModels.oneElement); getErrorString();

// using setComponentModifierValue can set component modifiers
setComponentModifierValue(BuildingModels.oneElement, thermalZoneOneElement.mSenFac, $Code(=mSenFacParameter)); getErrorString();

list(BuildingModels.oneElement); getErrorString();

给你:

代码语言:javascript
复制
true
""
"model oneElement
  Integer mSenFacParameter = 1;
  Buildings.ThermalZones.ReducedOrder.RC.OneElement thermalZoneOneElement;
end oneElement;"
""
Ok
""
"model oneElement
  Integer mSenFacParameter = 6;
  Buildings.ThermalZones.ReducedOrder.RC.OneElement thermalZoneOneElement;
end oneElement;"
""
Ok
""
"model oneElement
  Integer mSenFacParameter = 6;
  Buildings.ThermalZones.ReducedOrder.RC.OneElement thermalZoneOneElement(mSenFac = 6);
end oneElement;"
""
Ok
""
"model oneElement
  Integer mSenFacParameter = 6;
  Buildings.ThermalZones.ReducedOrder.RC.OneElement thermalZoneOneElement(mSenFac = mSenFacParameter);
end oneElement;"
""

基本上设置组件修饰符,构建代码,模拟它,获取结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74491912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档