我正在为我的应用数学专业开设一个项目,基本上我有一个数字类(三角模糊数),我有一个函数,它使用我给出的模糊数字的相似性方法。
问题是,这是一个模糊线性规划问题,所以我要做的是让我们说:
对于模糊数字A,B和C:
Max Z = (2, 3, 4)A (+) (3, 5, 7)B (+) (2, 4, 6)C
要查找Max Z,我必须将其转换为以下内容:
Max Z = Sqrt((1/3)((2Ax + 3Ay + 4Az)^2 + (3Bx + 5By + 7Bz)^2 + (2Cx + 4Cy + 6Cz)^2))
还有排名函数,它取一个模糊数的x,y和z并返回(x + 2y + z)/ 4
因此,对于模糊数(3,5,7)A,它必须回馈:
(3Ax + 10Ay + 7Az)/4
最好的办法是什么?
我决定给我的"三角模糊"或称为__type的Trifuz类,它是"定义"默认情况下,它有一个try / expect方法,尝试转换输入参数以创建一个三角模糊数(如Trifuz([3,5,7]))到int,如果它不能,它将自己指定为&#34 ;未定义"所以我可以知道模糊数字是定义为数字还是定义为未知数。
问题是,对模糊数A =(Ax,Ay,Az)的操作很容易,在模糊数A =(3Ax,5Ay,7Az)上操作很难,因为我需要能够对这些数字进行操作3,5和7,而Ax,Ay和Az被重新分配给新的值。
最好的办法是什么?
编辑:我也在谈论操作未知数字的数字部分,而不是在未知部分上操作。我想sqrt(2x)返回1.414√x。
忘了提到我试图这样做而不使用任何额外的库,特别是任何数学相关的库,甚至数学本身。
答案 0 :(得分:0)
好的,我找到了我想要实现的解决方案:
基本上我会将输入分为3x + 4y + z,用于在数组中创建模糊数,拆分为(3x,4y,z)并将其作为“__parameters”存储在Trifuz类中(3, 4,1)和(x,y,z)为“__unknowns”
为此,我将使用以下脚本:
def splitNumber(word):
split = list(word)
number = []
k = 0
while(True):
for i in split:
try:
number.append(int(i))
k = k + 1
except ValueError:
break
break
for i in range(0, k):
del split[i]
if(k == 0):
number.append(1)
number = "".join(str(x) for x in number)
split = "".join(split)
return [number, split]
这就像我想的那样,不使用额外的库,让我选择一个单词的第一个整数部分,将其拆分为两个,并将第二个部分作为“未知”,这样我就可以更容易地操作数字部分像3x1 + 4x2 + 5x3这样的东西,因为它不会在x3中抓取“3”,只是为它分配了数字。
对于任何简单为“x1”或“Ax”等的数字,它将返回1.