Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 诸如“直角三角形不是等边三角形的良好近似值”之类的说法是无益的。你说的“良好近似”是什么意思?对不起,我认为这是一个相当主观的说法。在我看来,距离最优解约0.1-1%的距离和有一个误差。在修改模拟退火方案后,我必须承认,这个贪婪算法产生了很好的结果,很难改_Python_Algorithm_Numpy_Geometry - Fatal编程技术网

Python 诸如“直角三角形不是等边三角形的良好近似值”之类的说法是无益的。你说的“良好近似”是什么意思?对不起,我认为这是一个相当主观的说法。在我看来,距离最优解约0.1-1%的距离和有一个误差。在修改模拟退火方案后,我必须承认,这个贪婪算法产生了很好的结果,很难改

Python 诸如“直角三角形不是等边三角形的良好近似值”之类的说法是无益的。你说的“良好近似”是什么意思?对不起,我认为这是一个相当主观的说法。在我看来,距离最优解约0.1-1%的距离和有一个误差。在修改模拟退火方案后,我必须承认,这个贪婪算法产生了很好的结果,很难改,python,algorithm,numpy,geometry,Python,Algorithm,Numpy,Geometry,诸如“直角三角形不是等边三角形的良好近似值”之类的说法是无益的。你说的“良好近似”是什么意思?对不起,我认为这是一个相当主观的说法。在我看来,距离最优解约0.1-1%的距离和有一个误差。在修改模拟退火方案后,我必须承认,这个贪婪算法产生了很好的结果,很难改进。美好的谢谢你的建议。我在考虑蒙特卡罗算法,但我肯定会尝试这种模拟退火方法。我会等上几个小时/几天,看看是否有更多的“专门化”解决方案出现,否则我想我会选择这个。至于采用d'=1/d的建议,我不太确定,因为1/d对我来说似乎不是一个真正的“指


诸如“直角三角形不是等边三角形的良好近似值”之类的说法是无益的。你说的“良好近似”是什么意思?对不起,我认为这是一个相当主观的说法。在我看来,距离最优解约0.1-1%的距离和有一个误差。在修改模拟退火方案后,我必须承认,这个贪婪算法产生了很好的结果,很难改进。美好的谢谢你的建议。我在考虑蒙特卡罗算法,但我肯定会尝试这种模拟退火方法。我会等上几个小时/几天,看看是否有更多的“专门化”解决方案出现,否则我想我会选择这个。至于采用
d'=1/d
的建议,我不太确定,因为
1/d
对我来说似乎不是一个真正的“指标”,我不知道这对所提出的算法有什么影响。我不同意你的观点,即OP的问题是NP完全的,我也看不到与最小顶点覆盖的联系。(在最小顶点覆盖问题中,你试图选取最小的覆盖集,但在OP的问题中,你必须精确选取k个点。)你能扩展你答案的这一部分吗?我不知道是否存在完美的联系,这就是为什么我说,“我不完全确定。”我还谈到加权最小顶点覆盖。因为图形在任意两点之间必然有一条边(因为它只是距离度量空间的一段距离),我相信这可以避免您提到的问题。也就是说,任何k点集都将是一个覆盖,即使是一个点也可以是一个覆盖,所以剩下的就是重量最小化。我不知道这种简化是否使它在多边形时间内可解,它很容易像最大独立集的二部形式。如果一个图在每两个顶点之间有一条边,那么一个顶点覆盖必须包含所有顶点,或者除了一个之外的所有顶点。(如果一个集合S缺少两个顶点,那么这两个顶点之间有一条未覆盖的边,因此S不是顶点覆盖。)因此我不理解你的说法“因为图形在任意两点之间必然有一条边……任意k点集都将是覆盖”。
all_nodes = np.asarray(...) # Set of nodes
all_dists = np.asarray(...) # Pairwise distances

N = len(all_nodes)
k = 10 # Or however many you want.

def calculate_distance(node_subset, distances):
    # A function you write to determine sum of distances
    # among a particular subset of nodes.    

# Initial random subset of k elements
shuffle = np.random.shuffle(all_nodes) 
current_subset = shuffle[0:k]
current_outsiders = shuffle[k:]

# Simulated annealing parameters.
temp = 100.0
cooling_rate = 0.95
num_iters = 10000

# Simulated annealing loop.
for ii in range(num_iters):
    proposed_subset = current_subset.copy()
    proposed_outsiders =  current_outsiders.copy()

    index_to_swap = np.random.randint(k)
    outsider_to_swap = np.random.randint(N - k)

    tmp = current_subset[index_to_swap]
    proposed_subset[index_to_swap] = current_outsiders[outsider_to_swap]
    proposed_outsiders[outsider_to_swap] = tmp

    potential_change = np.exp((-1.0/temp)*
        calculate_distance(proposed_subset,all_dists)/
        calculate_distance(current_subset, all_dists)) 

    if potential_change > 1 or potential_change >= np.random.rand():
         current_subset = proposed_subset
         current_outsiders = proposed_outsiders

    temp = cooling_rate * temp
selection = max(
    itertools.combinations(points, k),
    key=lambda candidate: sum(
        dist(p, q) for p, q in itertools.combinations(candidate, 2)
    )
)
(k! / 2! / (k-2)!) * (n! / k! / (n-k)! == n! /(2(k-2)!(n-k)!)