以数学方法构造的数据的pyomo反序列化

问题描述 投票:0回答:1

mathematica程序将基本正弦之和作为输出返回。向量的第一个元素是

-19.9959 Sinc[0.0418879 (0. + t)] Sinc[0.0897598 (-65. + u)]

该变量保存在文本文件中;但是,必须在pyomo中将其作为一个变量读取,因此StringReplace用于使此变量适应python的语法[]

savedXPython = 
 Import["savedWindX.txt"] // 
  StringReplace[#, {"[" -> "(", "]" -> ")", 
     "t" -> "m.lammda[i]*180/np.pi", "u" -> "m.phi[i]*180/np.pi"}] &

然后,保存的XPython被保存到另一个文本文件。但是,在使用pyomo时出现错误。 I asked here,答案是将结果保存在json文件而不是文本中。

Export["savedWindXPython.txt", savedXPython];
Export["savedWindXPythonJ.json", savedXPython, "ExpressionJSON"];

现在,在pyomo部分中,文本文件最初被读取为

g = open("savedWindXPython.txt","r")
b=f.readline()
g.close

稍后,在this thread之后,json被读取为

f = open("savedWindXPythonJ.json","r")
a=f.readline()
f.close

然后,pyomo代码中的变量定义为

def Wind_lammda_definition(model, i):
    return m.Wind_lammda[i] == a
m.Wind_lammda_const = Constraint(m.N, rule = Wind_lammda_definition)

对于json文件或def Wind_lammda_definition(model,i):返回m.Wind_lammda [i] == bm.Wind_lammda_const =约束(m.N,规则= Wind_lammda_definition

如果是原始文本文件,则>

但是该代码不起作用。 AttributeError: 'str' object has no attribute 'is_relational',导致我无法从文本文件中读取变量的错误也出现在json案例中。

似乎使用json格式没有帮助。有人可以告诉我json实现是否做错了吗?

mathematica程序将基本正弦之和作为输出返回。向量的第一个元素是-19.9959 Sinc [0.0418879(0. + t)] Sinc [0.0897598(-65。+ u)]变量保存在文本中...

python json deserialization wolfram-mathematica pyomo
1个回答
0
投票

从文件中读取一行时,Pyhton将始终返回一个字符串。如果1是您行中唯一的内容,则返回的值将等于"1",而不是1。可以用a = float(a)解决,因为您想在约束中使用数字值。这只会将您的a字符串转换为浮点数。

© www.soinside.com 2019 - 2024. All rights reserved.