我已经用建筑物库在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重新构建模型。
但是,这种方法对我也不起作用,我不知道为什么。
我需要能够在优化算法中的迭代中设置mSenFac。如果有人能回答以下问题,我将不胜感激:
mSenFac
设置mSenFac?
向你问好,法纳兹
发布于 2022-11-22 08:59:06
运行此脚本:
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();给你:
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;"
""基本上设置组件修饰符,构建代码,模拟它,获取结果。
https://stackoverflow.com/questions/74491912
复制相似问题