尝试在python中使用唯一值执行整数优化

2024-10-01 04:53:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python执行并解决一个优化问题。在这一点上,我已经熟悉了Scipy,但是我没有将它正确地用于唯一整数值的约束。你知道吗

下面的例子可能更适合mlrose标签。你知道吗

在一个较高的层次上,我试图创建一个瑞士配对,我看到了一些文章和其中一个建议“惩罚矩阵”和尽量减少惩罚。以下是我所做的:

import mlrose
import numpy as np

# Create Penalty Matrix
x = np.round(np.random.rand(8,8)*50)
z = np.eye(8, dtype=int)*100 + x

print(z)
# fitness problem given a penalty matrix and an order
def pairing_fittness(order, panalty):
  print(order)
  order = np.array(order)
  a = np.bincount(order)
  order = order.reshape(-1, 2)
  PF = 0
  for pair in order:
    print("{}, {}: {}".format(pair[0],pair[1], panalty[pair[0],pair[1]]))
    PF = PF + panalty[pair[0],pair[1]]
  print("Real PF: ",PF)
  print("order penalty: {}".format((np.max(a) - 1) * 1000))
  return (PF + (np.max(a) - 1) * 1000)

它试图解决的问题之一是创建一个具有唯一值的数组(同一玩家不能在同一轮中玩两次),这就是为什么重复值的惩罚很高(1000)

kwargs = {'panalty': z}

fitness_cust_problem_fun = mlrose.CustomFitness(pairing_fittness, **kwargs)
problem = mlrose.DiscreteOpt(length = 8,
                             fitness_fn = fitness_cust_problem_fun,
                             maximize = False,
                             max_val = 8,
                            )

best_state, best_fitness = mlrose.simulated_annealing(
    problem,
    max_attempts = 300,
     max_iters = 100000,
    random_state = 1)

print(best_state)
print(best_fitness)

无论我做什么,超过6个变量它不能找到一个唯一的值数组来优化它。而我可以在Excel(Solver>;evolutional)中完成。你知道吗

我在找一个更好的工具(我用过)科学优化但我不确定它是否适用于整数问题,因为我得到了更好的结果(mlrose)或如何改进我的优化问题,使其可解的建议。你知道吗


Tags: importnporder整数建议maxbeststate