我的程序使用遗传技术来构建方程式。
它将字符串随机组合成一个未知的方程式。
"(((x + 1) * x) / (4 * 6) ** 2)"
其中一个字符串是:“math.factorial(random.randint(1,9))”
因此,等式通常类似于:
“(((x + 1) * x) / (4 * 6) ** 2) + math.factorial(random.randint(1,9))
”
生成50个不同的方程,然后根据
分配适应值它们在一系列值上接近sin函数的程度如何。
for x in numpy.arange(1,6.4,.1):
fitness += abs(eval"(((x + 1) * x) / (4 * 6) ** 2) + math.factorial(random.randint(1,9)) - numpy.sin(x))")
程序经常抛出一个异常,它被'除了TypeError'子句捕获。 错误消息是“不支持的操作数类型+:'long'和'numpy.float64'”
当我尝试“type(numpy.sin(1))”时,它返回
输入:numpy.float64
如何让'long'和'numpy.float64'操作数类型一起工作? 任何帮助将不胜感激。
@catchmeifyoutry:好主意!不幸的是,这是一个等式。我从来没有
尝试将这一个分开。我想知道是否有解析实用程序来帮助
解决所有括号。
(((math.factorial(random.randint(1,9)))) - (((X)+((((math.factorial(random.randint(1,9))))**( (math.factorial(random.randint(1,9))))) - (((6.0)/(((8.0)/(((3.0) - (8.0))/(((5.0)*((2.0 )/(X)))/(8.0))))+(4.0)))/(8.0))))+(7.0)))
我会尝试捕捉失败的x值。
答案 0 :(得分:3)
首先,您在示例中缺少结束括号,(+ or - or / or * or **)
令人困惑。
你想要达到什么目的? 你只想在字符串中插入结果吗? 试试这个:
for x in numpy.arange(1,6.4,.1):
s = "sinus %f is %f!" % (x, numpy.sin(x))
print type(s), s
请参阅string formatting文档。
修改的
啊,是的,遗传编程,这解释了你想要做的事情;)
根据您的最新信息,我不得不猜测您的字符串结构有时会出错。 更改代码以显示导致引发异常的字符串。最简单的方法是在调用eval之前打印字符串,并且当抛出异常时,您可以看到最后的等式是什么。 然后,如果不清楚它有什么问题,你可以在这里发布这个等式。
答案 1 :(得分:1)
这对我有用:
for x in numpy.arange(1,6.4,.1):
eval("( 1 + (2 * 3) / 4 ) * numpy.sin(x)")