Python 错误修复:TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
Python 错误修复:TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
抱歉,我之前的代码存在错误。错误发生在尝试打印最大概率和最佳方案时,因为找不到最佳方案导致 max_solution 的值为 None,而在尝试执行 max_solution+1 时产生类型错误。
为了修复这个错误,我们可以添加一个条件来检查是否找到了最佳方案。请尝试以下修改后的代码:
import numpy as np
import pandas as pd
from collections import deque
import heapq
# 读取网络数据
logicalNetwork = pd.read_excel('逻辑网络1.xls', header=None).to_numpy()
physicalNetwork = pd.read_excel('物理网络1.xls', header=None).to_numpy()
# 获取网络的节点数
num_nodes = logicalNetwork.shape[0]
# 用于存储已经存在的路径
existing_paths = set()
# 随机删除6条物理路径
np.random.seed(0)
deleted_paths = np.random.choice(np.where(physicalNetwork > 0)[0], size=6, replace=False)
for path in deleted_paths:
physicalNetwork[np.unravel_index(path, physicalNetwork.shape)] = 0
# 计算两个节点在物理网络上的连接概率
def calculate_connection_probability(logical_node, physical_node):
if logical_node == physical_node:
return 1.0
elif logicalNetwork[logical_node, logical_node] == 0:
return 0.0
else:
paths = [bfs(logical_node, physical_node)]
for i in range(num_nodes):
if i != logical_node and i != physical_node and logicalNetwork[logical_node, i] > 0:
paths.append(bfs(logical_node, i) + bfs(i, physical_node)[1:])
min_loads = [min(physicalNetwork[p[i]-1, p[i+1]-1] for i in range(len(p)-1)) for p in paths]
return sum(1 for load in min_loads if load >= 10) / len(min_loads)
# 网管节点与其他节点可以通过物理网络联通的概率最大的方案
max_probability = 0.0
max_solution = None
# 遍历所有逻辑网络中的节点
for i in range(num_nodes):
if i != 25: # 排除网管节点
probability = calculate_connection_probability(25, i)
if probability > max_probability:
max_probability = probability
max_solution = i
# 打印最大概率和最佳方案
if max_solution is not None:
print(f'The maximum probability is {max_probability:.4f} for the solution where the management node connects to node {max_solution+1}.')
else:
print('No solution found.')
这次修改后的代码会检查 max_solution 是否为 None,如果是,则打印 'No solution found.'。希望这次能够顺利运行,并正确输出结果!
原文地址: https://www.cveoy.top/t/topic/Urs 著作权归作者所有。请勿转载和采集!