开发 Python 例程...我需要帮助来制定这个问题:
工程问题:我有 3 个位置((x=3),每个位置有 4 个物理支撑(y=4):
Loc 1: {H1, L1, R1, G1}
Loc 2: {H2, L2, R2, G2}
Loc 3 (x):{H3, L3, R3, G3}
跨位置的有效组合(用于测试和优化)是:
H1(Loc1), H2(Loc2), H3(Loc3)------ cost 1
H1(Loc1), H2(Loc2), L3(Loc3)------ cost 2
H1(Loc1), H2(Loc2), R3(Loc3)------ cost 3
H1(Loc1), H2(Loc2), G3(Loc3)------ cost 4
下一组,
H1(Loc1), L2(Loc2), H3(Loc3)------ cost 5
H1(Loc1), L2(Loc2), L3(Loc3)------ cost 6
H1(Loc1), L2(Loc2), R3(Loc3)------ cost 7
H1(Loc1), L2(Loc2), G3(Loc3)------ cost 8
下一组,
H1(Loc1), R2(Loc2), H3(Loc3)------ cost 9
H1(Loc1), R2(Loc2), L3(Loc3)------ cost 10
H1(Loc1), R2(Loc2), R3(Loc3)------ cost 11
H1(Loc1), R2(Loc2), G3(Loc3)------ cost 12
下一组,
H1(Loc1), G2(Loc2), H3(Loc3)------ cost 13
H1(Loc1), G2(Loc2), L3(Loc3)------ cost 14
H1(Loc1), G2(Loc2), R3(Loc3)------ cost 15
H1(Loc1), G2(Loc2), G3(Loc3)------ cost 16
总共有 16 套,每套都有成本。并且,还会有 3 套 16 套(总共 64 套)。顺便说一句,顺序很重要,但不要重复。因此,{H1,G2,H3} 不同于 {G2,H1,H3} 和 {H1,H3,G2} 等等。
首先,我是否正确假设解决方案空间中可能的集合总数为 4^3 (y^x) 个集合?这个叫什么?我对术语感到困惑。排列,组合?
我需要选择成本最低的集合,或者显示所有成本大致相同的集合(比如彼此相差 10% 以内)。对于这个例子,我想我可以通过设置 3 个循环来处理它,每个位置一个循环,并迭代项目。
prevcost = 0.0
for loc1 items i:1 to 4
for loc2 items j: 1 to 4
for loc3 items k: 1 to 4
cost = findcost(i,j,k)
if cost < prevcost:
prevcost = cost
因为我已经有了与每组相关的成本;这是我调用的一个单独的例程来查找一组成本,我可以完成这项工作。
但是,如果我在每个位置有 40 个位置和 5 个可能的项目,我是否必须处理 5^40 组(9E+27!!)?我无法设置 40 个嵌套循环;递归是一个答案。但这需要一个聪明的搜索程序。我刚读完“模拟退火”技术,但不知道如何适应它。
该例程(最终)将能够为工业厂房环境中的管道系统找到物理现场支持的最佳组合。最好,我的意思是在支撑上产生最小负载的支撑组合。我计划(a)一次有选择地选择一个组合,(b)通过工程求解器运行它,(c)然后让我的例程解析结果文件以找到支撑载荷的总和(在所有位置),并迭代继续前进,直到找到最佳组合。
我用于“成本计算”的结果文件的格式在这里: python genfromtxt questions
寻找想法。感激地接受所有答案。谢谢你。