我正在开发一种应用程序,可以最佳地为医院的护士分配班次.我认为这是一个带离散变量的线性规划问题,因此可能是NP难的:
因此,基本上存在大量(约20*30 = 600)变量,每个变量可以采用少量离散值.
目前,我的计划是使用修改后的Min-conflicts算法
有更好的想法吗?我有点担心它会陷入局部最佳状态.我应该使用某种形式的模拟退火吗?或者不仅考虑一次改变一个变量,而且特别考虑两个人之间的转换(当前手动算法中的主要部分)?我想避免将算法定制到当前约束,因为那些可能会改变.
编辑:没有必要找到严格的最佳解决方案; 名单目前是手工完成的,我很确定结果在大多数时候都是非常不理想的 - 不应该难以击败.短期调整和手动覆盖也一定是必要的,但我不认为这是一个问题; 将过去和手动分配标记为"已修复"实际上应该通过减少解决方案空间来简化任务.
algorithm mathematical-optimization linear-programming discrete-mathematics
有谁知道这样一个执行数学优化的库(线性编程,凸优化或更一般类型的问题)?我正在寻找像MATLAB这样的东西,但能够处理更大的问题.我是否必须编写自己的实现,或者购买其中一种商业产品(CPLEX等)?
mathematical-optimization linear-programming convex-optimization cplex gurobi
我有一个Python脚本,我需要解决线性编程问题.问题是解决方案必须是二进制的.换句话说,我需要一个等效的MATLAB的bintprog函数.NumPy和SciPy似乎没有这样的程序.有没有人建议我如何做这三件事之一:
找一个包含这样一个函数的Python库.
限制问题,使其可以通过更通用的线性编程求解器来解决.
使用MATLAB与Python接口,以便直接使用bintprog.
当代码等待延迟时间不确定的某种情况时,看起来很多人选择使用指数退避,即等待N秒,检查条件是否满足; 如果没有,等待2N秒,检查条件等.这对于检查恒定/线性增加的时间跨度有什么好处?
linear-programming non-deterministic exponential-backoff retry-logic
我正在尝试为幻想自行车比赛计算最佳团队。我有一个csv文件,其中包含176个自行车手,他们的球队,所获得的积分以及将其放入我的球队的价格。我试图找到得分最高的16个自行车队。
适用于任何团队组成的规则是:
我的csv文件的简短摘录可以在下面找到。
THOMAS Geraint,Team INEOS,142,13
SAGAN Peter,BORA - hansgrohe,522,11.5
GROENEWEGEN Dylan,Team Jumbo-Visma,205,11
FUGLSANG Jakob,Astana Pro Team,46,10
BERNAL Egan,Team INEOS,110,10
BARDET Romain,AG2R La Mondiale,21,9.5
QUINTANA Nairo,Movistar Team,58,9.5
YATES Adam,Mitchelton-Scott,40,9.5
VIVIANI Elia,Deceuninck - Quick Step,273,9.5
YATES Simon,Mitchelton-Scott,13,9
EWAN Caleb,Lotto Soudal,13,9
Run Code Online (Sandbox Code Playgroud)
解决此问题的最简单方法是生成团队所有可能组合的列表,然后应用规则排除不符合上述规则的团队。此后,很容易计算每个团队的总得分并选择得分最高的团队。从理论上讲,可以通过以下代码生成可用团队列表。
database_csv = pd.read_csv('renner_db_example.csv')
renners = database_csv.to_dict(orient='records')
budget = 100
max_same_team = 4
team_total = 16
combos = itertools.combinations(renners,team_total)
usable_combos = []
for i in combos:
if sum(persoon["Waarde"] for persoon in i) < budget and all(z <= max_same_team for …Run Code Online (Sandbox Code Playgroud) python mathematical-optimization linear-programming python-itertools
我找到了一些解决方案,但它们太乱了.
algorithm linear-algebra linear-programming convex-optimization convex-polygon
我正在为 ZenUML 设计一个布局引擎。一项要求(简化后)是这样的:
^standard deviation被用作我可以用我有限的数学知识精确描述的最佳替代方案。然而,正如 Roman 和 David 指出的,在某些情况下,有更有吸引力的结果不能满足最低要求standard deviation。看到这个评论
有姐妹提问https://math.stackexchange.com/q/4377433。这与用数学语言(矩阵)描述的问题相同。
例如,对于有 4 个点(P1 ~ P4)的线段。
m_d(P1,P3)= 200,m_d(P1,P4)= 900。
我需要单纯形算法的强大C++源代码(是一种用于线性规划问题的数值解法的流行算法).
请不要链接到维基百科.我需要C++中的良好源代码,使用模板,清晰的用户友好名称,并且工作得很好.
优选地,算法必须检查不稳定的浮点计算.
经过数年和多年的Matlab,我仍然是Python的新手.我正在尝试使用Pulp来设置整数线性程序.
鉴于一系列数字:
{P[i]:i=1...N}
Run Code Online (Sandbox Code Playgroud)
我想最大化:
sum( x_i P_i )
Run Code Online (Sandbox Code Playgroud)
受限制
A x <= b
A_eq x = b_eq
Run Code Online (Sandbox Code Playgroud)
和边界(基于矢量的边界)
LB <= x <= UB
Run Code Online (Sandbox Code Playgroud)
然而,在纸浆中,我没有看到如何正确地进行矢量声明.我用的是:
RANGE = range(numpy.size(P))
x = pulp.LpVariable.dicts("x", LB_ind, UB_ind, "Integer")
Run Code Online (Sandbox Code Playgroud)
我只能输入个别边界(所以只有1个数字).
prob = pulp.LpProblem("Test", pulp.LpMaximize)
prob += pulp.lpSum([Prices[i]*Dispatch[i] for i in RANGE])
Run Code Online (Sandbox Code Playgroud)
对于约束,我真的必须每行做这行吗?似乎我错过了一些东西.我将不胜感激.文档讨论了一个简短的例子.在我的情况下,变量的数量是几千.
二次编程库是否有任何Haskell绑定?
如果没有,我应该编写哪一个简化的绑定来假设我无法避免需要一个?是否有一个合理的规范优惠的开源库?
optimization haskell mathematical-optimization linear-programming
algorithm ×4
python ×3
c++ ×1
cplex ×1
gurobi ×1
haskell ×1
matlab ×1
optimization ×1
pulp ×1
retry-logic ×1