天道酬勤,学无止境

mathematical-optimization

How do multiple calls on a single threaded DLL function scale?

Currently I have a DLL that accesses a MILP calculation within MATLAB, from what I understand most MILP solvers are single threaded, and I was wondering how/if that comes into play with multiple simultaneous calls on the MILP solver. Do the calculations queue up behind each other and all process across that single thread or is there some way of spreading the load? I am trying to understand how effectively this combination scales from a single call to 100 near simultaneous calls. Does it become constrained by the hardware or the software?

2021-09-24 06:38:45    分类:问答    multithreading   matlab   dll   mathematical-optimization   linear-programming

重新计算平均值(Recalculate an average value)

问题 在我的 Java 应用程序中,我需要根据以下数据重新计算平均值: 我知道当前的平均价值 - avgValue 我知道avgValue是 12 个值列表的平均值 - count 。 基于此信息,如何在将新value添加到前 12 个值的列表中时重新计算 avgValue。 13 个值列表的新avgValue是什么 - count + 1 ? 回答1 Current Sum = avgValue * 12 New sum = current Sum + New value New average = New sum / 13 回答2 如果您想确保不会溢出您的数据类型,那么您将希望避免计算总和。 我建议使用: New average = avgValue + ((New value - avgValue) / 13)

2021-09-24 00:46:18    分类:技术分享    math   mathematical-optimization

R中的并行/多核处理整数程序?(Parallel / Multicore Processing in R for an Integer Program?)

问题 是否有专门让 R 通过并行计算运行得更快的软件包? 我制作了一个需要运行一段时间的非常大的IP,所以我想知道R中是否有一个特定的包可以帮助我运行我的IP。 目前,我有一个函数可以返回 IP 的解决方案,而 R 卡住的主要线路(很...很长时间)是当我使用 lp (....all.int = TRUE) 时。 我的 Windows 计算机上的 CPU 大约为 12.5%(8 核),我希望它接近 100 编辑:我尝试使用 doParallel 包, library('doParallel') cl <- makeCluster(8) registerDoParallel(cl) 但是我的 CPU 使用率仍然不是 100%。 我还需要做什么? 是否有特定的包可以使优化问题运行得更快? 大多数并行包有助于模拟,而 foreach 似乎只适用于迭代结构/应用函数。 我只想让 R 使用我所有的 CPU 使用率

2021-09-23 23:11:57    分类:技术分享    r   parallel-processing   mathematical-optimization   multicore

尽管数学上不可能,Gurobi 报告了无界模型(Gurobi reports unbounded model despite mathematical impossibility)

问题 我正在使用 Julia 出色的 JuMP 包来求解以 Gurobi 6.0.4 作为求解器的线性程序。 目标函数是决策变量的总和,明确定义为非负,问题要求将其最小化。 出于某种原因,Gurobi 认为该模型是无界的。 以下是变量和目标的定义: @defVar(model, delta2[i=irange,j=pair[i]] >= 0) @setObjective(model, Min, sum{delta2[i,j], i=irange, j=pair[i]}) 奇怪的观察 #1:虽然这是一个最小化问题,但 Gurobi 的 BarrierSolve 方法的日志清楚地显示目标函数在每次迭代时增加。 此外,Gurobi 似乎在行数和列数之间进行了切换。 在预求解步骤之前,模型有 50k 行和 25k 列。 在预求解步骤(删除少于 1k 行和列)之后,我们有 24k 行和 50k 列。 日志如下所示: Optimize a model with 50422 rows, 24356 columns and 1846314 nonzeros Coefficient statistics: Matrix range [1e-04, 2e+00] Objective range [1e+00, 1e+00] Bounds range [9e-02, 2e+02] RHS range

2021-09-22 10:38:31    分类:技术分享    mathematical-optimization   julia   linear-programming   gurobi   julia-jump

如何对矩阵上的函数进行离散优化?(How to perform discrete optimization of functions over matrices?)

问题 我想对条目为 0 或 1 的所有 30 x 30 矩阵进行优化。我的目标函数是行列式。 一种方法是某种随机梯度下降或模拟退火。 我查看了 scipy.optimize 但据我所知,它似乎不支持这种优化。 scipy.optimize.basinhopping 看起来很诱人,但它似乎需要连续变量。 Python 中是否有用于这种一般离散优化的工具? 回答1 我认为遗传算法在这种情况下可能会很好地工作。 这是一个使用 deap 组合在一起的快速示例,大致基于此处的示例: import numpy as np import deap from deap import algorithms, base, tools import imp class GeneticDetMinimizer(object): def __init__(self, N=30, popsize=500): # we want the creator module to be local to this instance, since # creator.create() directly adds new classes to the module's globals() # (yuck!) cr = imp.load_module('cr', *imp.find_module('creator'

2021-09-22 04:41:08    分类:技术分享    python   numpy   scipy   mathematical-optimization   discrete-mathematics

如何对矩阵上的函数进行离散优化?(How to perform discrete optimization of functions over matrices?)

问题 我想对条目为 0 或 1 的所有 30 x 30 矩阵进行优化。我的目标函数是行列式。 一种方法是某种随机梯度下降或模拟退火。 我查看了 scipy.optimize 但据我所知,它似乎不支持这种优化。 scipy.optimize.basinhopping 看起来很诱人,但它似乎需要连续变量。 Python 中是否有用于这种一般离散优化的工具? 回答1 我认为遗传算法在这种情况下可能会很好地工作。 这是一个使用 deap 组合在一起的快速示例,大致基于此处的示例: import numpy as np import deap from deap import algorithms, base, tools import imp class GeneticDetMinimizer(object): def __init__(self, N=30, popsize=500): # we want the creator module to be local to this instance, since # creator.create() directly adds new classes to the module's globals() # (yuck!) cr = imp.load_module('cr', *imp.find_module('creator'

2021-09-22 04:39:44    分类:技术分享    python   numpy   scipy   mathematical-optimization   discrete-mathematics

最小化数组相邻项中的函数(Minimize function in adjacent items of an array)

问题 我有一个元素数组( arr )和一个函数( f ),它接受 2 个元素并返回一个数字。 我需要对数组进行排列,以便f(arr[i], arr[i+1])对于arr每个i尽可能少。 (它应该循环,即它也应该最小化f(arr[arr.length - 1], arr[0]) ) 此外, f有点像距离,所以f(a,b) == f(b,a) 如果效率太低,我不需要最佳解决方案,但一个运行合理且速度快的解决方案,因为我需要实时计算它们(我不知道arr长度是多少,但我认为它可以大约 30 岁) 回答1 “对于 arr 中的每个 i,使得 f(arr[i], arr[i+1]) 尽可能少”是什么意思? 你想最小化总和吗? 你想最小化其中最大的吗? 你想先最小化 f(arr[0],arr[1]),然后在所有最小化它的解决方案中,选择最小化 f(arr[1],arr[2]) 的一个,等等,等等上? 如果你想最小化sum ,这正是旅行商问题的全部一般性(好吧,“度量 TSP”,也许,如果你的 f 确实形成了一个度量)。 对天真的解决方案进行了巧妙的优化,可以为您提供精确的优化并在合理的时间内运行大约 n=30; 您可以使用其中一种方法,或者使用一种可以为您提供近似值的启发式方法。 如果你想最小化最大值,这是一个更简单的问题,虽然仍然是 NP-hard:你可以对答案进行二分搜索; 对于特定值 d

2021-09-21 19:54:25    分类:技术分享    arrays   algorithm   language-agnostic   permutation   mathematical-optimization

使用 fmincon Matlab 函数的 SQP 算法获取退出标志:0,2(Getting Exit-Flag: 0,2 with SQP algorithm of fmincon Matlab function)

问题 我有一个大规模的多目标优化问题需要使用Matlab fmincon求解器来解决。 我尝试了不同的求解器以获得更好更快的输出。 这是挑战: 我得到Exit Flag: 1,0,4,5 for different Pareto points,因为它是一个多目标优化问题,使用Active-set algorithm 。 然后我尝试检查不同的算法,如interior-point和sqp以生成帕累托点。 我观察到sqp返回很少的exit flags 1 、一些2和一些0但没有返回任何4或5 flag 。 另外,我应该注意到,它的0和2标记的解决方案是正确的答案。 但是,当涉及返回除1之外的任何exit flag时,解决帕累托点需要很长时间。 由于interior-point算法是为大规模程序设计的,它在生成帕累托解决方案方面比sqp快得多。 但是,它只返回带有Exit flag 0解决方案。 不幸的是,它的0标记解决方案是错误的解决方案,尽管sqp其0和2标记解决方案是正确答案。 0)无论如何配置fmincon来解决我的interior-point问题并获得正确的解决方案? 在文献中我看到一些类似于我的问题已经用interior-point算法解决了。 1) 是否有任何设置(TolX,TolCon,...)可用于获得更多exit flag 1 ? 2

2021-09-20 23:44:43    分类:技术分享    algorithm   matlab   optimization   mathematical-optimization   solver

混合整数规划:每个条件的变量赋值(if then else)(Mixed integer programming: variable assignment per condition (if then else))

问题 我对(混合)整数规划比较陌生,并且被约束的公式所困扰。 在我的简化模型中,我有一个参数和两个变量,它们是正实数,上限为 321。 我想表达的逻辑在这里: if Parameter > Variable1: Variable2 = Variable1 else: Variable2 = Parameter **edit** (while Variable1 is always >= Variable2) 实际上是否可以使用线性 in(equalities) 来描述这一点? 如果有帮助:对于实现,我使用 Python、Pyomo 和最新的 gurobi 求解器。 谢谢你的帮助! 回答1 编辑:将Variable2设置为Variable1和Parameter最小值或最大值。 min(Parameter,Variable1) : 如果您确定Variable2在目标函数中“希望” Variable2小,那么您只需要要求Variable2小于或等于Parameter和Variable1 : Variable2 <= Variable1 Variable2 <= Parameter max(Parameter,Variable1) : 如果您确定Variable2在目标函数中“希望” Variable2大,那么您只需要要求Variable2大于或等于Parameter和Variable1

2021-09-18 12:40:50    分类:技术分享    optimization   mathematical-optimization   linear-programming   scientific-computing   integer-programming

如何使用约束规划来优化购物篮?(How to use constraint programming for optimizing shopping baskets?)

问题 我有一个我想购买的物品清单。 商品由不同的商店和不同的价格提供。 商店有单独的送货费用。 我正在寻找一种最佳的购物策略(以及一个支持它的 java 库)来以最低的总价格购买所有商品。 例子: Item1 在 Shop1 的售价为 100 美元,在 Shop2 的售价为 111 美元。 Item2 在 Shop1 售价 90 美元,在 Shop2 售价 85 美元。 Shop1 的送货费用:如果总订单 < 150 美元,则为 10 美元; 否则 $0 Shop2 的送货费用:如果总订单 < 50 美元,则为 5 美元; 否则 $0 如果我在 Shop1 购买商品 1 和商品 2,总成本为 100 美元 + 90 美元 + 0 美元 = 190 美元。 如果我在 Shop2 购买商品 1 和商品 2,总成本为 111 美元 + 85 美元 + 0 美元 = 196 美元。 如果我在 Shop1 购买商品 1 并在 Shop2 购买商品 2,则总成本为 100 美元 + 10 美元 + 85 美元 + 0 美元 = 195。 如果我在 Shop1 订购商品 1 和商品 2,我会得到最低价格:190 美元 到目前为止我尝试过的 之前我问了另一个问题,这让我进入了约束规划领域。 我看过奶油和巧克力,但我不知道如何创建模型来解决我的问题。 | shop1 | shop2 | shop3

2021-09-18 09:31:56    分类:技术分享    java   constraints   mathematical-optimization   constraint-programming