Tag: 求解器

用求解器的VBA结果logging

我想用求解器来优化一个非线性问题的系统。 对于每个循环,我想logging变化的单元格结果,它们是单元格(5,4),单元格(5,5),单元格(5,6),单元格(5,7)。 但我的代码似乎只logging第一个循环的结果。 Sub Macro1() ' ' Macro1 Macro ' ' Dim lIncrement As Long lIncrement = 10 For Counter1 = 10 To 12 For Counter2 = 10 To 20 Step lIncrement Cells(18, 2) = Counter1 Cells(11, 2) = Counter2 SolverOk SetCell:="$H$16", MaxMinVal:=1, ValueOf:=0, ByChange:="$D$5:$G$5", _ Engine:=3, EngineDesc:="Evolutionary" SolverOk SetCell:="$H$16", MaxMinVal:=1, ValueOf:=0, ByChange:="$D$5:$G$5", _ Engine:=3, […]

Excel VBA:将小数读作“”,并在计算时将其转换为“。”

我正在使用Solver进行优化,现在有一些小数点的问题。 使用瑞典Excel,我的默认小数点是一个逗号“,”,但我从论坛阅读, 求解器需要有一个周期符号forms的小数“。” Private Sub CommandButton1_Click() Worksheets("Blad1").Activate SolverReset SolverOk SetCell:=B63, MaxMinVal:=1, ByChange:=Range("B45:B62") SolverAdd CellRef:=B45, Relation:=1, FormulaText:=P24 SolverAdd CellRef:=B45, Relation:=3, FormulaText:=O24 SolverAdd CellRef:=L45, Relation:=1, FormulaText:=L3 SolverAdd CellRef:=L46, Relation:=3, FormulaText:=L4 SolverAdd CellRef:=B63, Relation:=3, FormulaText:=B42 SolverSolve End Sub 以上是我的代码总之(现实中有更多的约束)。 这里所有单元格的引用都是以包含带分隔符“,”的十进制数的单元格。 我试图添加一个“0.00”types的自定义格式(如果不能将小数转换为句点并在答案中将其转换回逗号,那么这不是最佳的解决scheme,而是一个好的解决scheme),但是它导致了整数,比如说3,变成“0.03”,意思就是“3.00”。 有没有办法读取一个十进制数字“,”将其转换为“。” 同时做计算,并随后提供答案与“,”而不必“全球”更改从逗号到句点的小数,因为我有许多Excel工作簿将无法按预期使用“。”。 提前致谢 编辑:现在testing了一些,我意识到,求解器实际上可以 “处理”逗号小数。 实际上,求解器可以打印由逗号小数组成的解决scheme,但似乎有些函数(例如SolverSolve)是基于终点小数。 我testing了在新的工作簿中实现以下内容: Sub Makro1() Dim MyNumber1 As Double Dim MyNumber2 As Double […]

使用Excel解算器通过外部程序进行计算

目前,我有一个电子表格,它使用外部程序来进行计算(假设这是一个气动计算工具)。 在Excel VBA中,我通过电子表格级别的UDF( = input(“var1”,1.234) )更新程序的input 。 然后,使用VBA,我写入input文件,运行外部.exe,并读取输出文件。 输出再次通过UDF( = output(“var2”) )报告到电子表格级别 我想使用Excel求解器函数来优化电子表格。 在这里,我希望它改变input值(通过= input()函数),以获得最佳的输出(通过= output()函数)。 求解器应该能够改变input,等待新的计算(通过外部.exe),然后在获得输出时恢复。 到目前为止,我没有find可靠的方法来使其工作。 即使当我在inputUDF中embeddedshell(.exe)命令时,Excel解算器也不知道它需要等待.exe才能完成….解算器仍然犁过,好像什么也没有发生。 预计,由于输出与input不同步,所以会出现双层。 我撬开SOLVER.XLAM(… ahemm ..)find一种插入等待语句的方法,但是这并没有多大帮助; 接口结束了VBA与SOLVER.dll接口的地方,它将挂钩放到Excel中,直接从.dll运行Excel计算…所以对我没有任何帮助。 到目前为止,我很难过。 以前似乎没有人遇到过这个问题。 我已经试过看OpenSolver.org版本,但他们也结束在一些神秘的.dll或.exe界面。 有任何想法吗? (顺便说一句:我没有访问外部程序代码,如果你想知道….一个.exe和一些文本文件是我所得到的)。

Excel与matlab求解器相当

我目前坚持尝试在matlab中使用求解器,类似于我在excel中使用的求解器。 我的问题如下: 我有一个50x6matrix(命名为TO),我需要尽可能地减less(目标是0)。 这个matrix是函数f的结果,其中MO是必须改变以达到目标的matrix。 到目前为止,我已经尝试使用fgoalattain ,这里是我写的代码: h = @(MO)f(A,B,alpha,MO,OA,OB,50); goal = zeros(50,6); weight = ones(50,6); [MO,fval] = fgoalattain(h,MO,goal,weight); MO是必须改变的matrix。 它的大小是12×12。 我希望函数f(TO)的结果是一个值尽可能接近0的matrix。 运行代码时,我得到以下结果: Solver stopped prematurely. fgoalattain stopped because it exceeded the function evaluation limit, options.MaxFunEvals = 14500 (the default value). 我尝试使用选项来增加迭代的次数,但无济于事: options = optimset('Display','iter','Algorithm','interior-point','MaxIter',5000000,'MaxFunEvals',5000000); [MO,fval] = fgoalattain(h,MO,goal,weight,[],[],[],[],[],[],[],options); 我使用求解器迷路了,这和我在excel中使用的截然不同,而且我对matlab还是一个新的东西。 任何帮助将非常感激。 谢谢 !

Excel求解器的dynamicinput

我正在尝试为工厂工作单元创build求解器模型,该模型基本上可以计算在工厂时间限制内工作的最低成本制造解决schemevs库存(EOQ模型)。 我遇到了一些阻碍,一些工作单元由多个具有不同运行率和成本的线路选项组成。 例如: 示例表基本上,我想要发生的是使用WorkCentre,因此相关的成本和计时会随着求解器解决批处理大小而更新。 我不知道这是可能的Excel解算器…

不连续求解器约束解决方法

我正在开发一个在Excel中使用OpenSolver的生产模拟。 我知道我不能使用if,或者和statements来约束求解器。 我需要一个约束,说: X必须在150-250的范围内,否则X可以等于0。 我已经阅读了不同的方式来替代条件公式的二进制约束,但我不知道如何使它完全工作。 任何帮助是极大的赞赏。

Excel解算器和lp_solve API

我有一个混合整数/二进制线性规划问题,免费版本的Excel求解器可以find满足所有约束的解决scheme。 但是,我从C ++调用的lp_solve API找不到解决scheme。 我怀疑excel求解器简化了这个问题。 到目前为止,我在Excel解算器选项中find2个参数:mip gap和约束精度。 前者设置为1%,我将lp_solve的mip间隙设置为1%,但我不知道lp_solve中的等效约束精度是多less。 任何人都可以帮忙 谢谢!

Excel求解器,最大化两个值的方法?

我是微软excels解算器的用户,我很确定这是不可能解决,以最大限度地发挥两个值。 我想知道是否有人可能有另一种聪明的方式来做到这一点。 基本上我有一列数字在1到30之间,我需要查看一下,并根据其他约束从9到10的值(200)。 我也想不只是最大化这个价值,而且也是一个概率值(范围从0到1),我也想最大化。 将它们加起来将不会起作用,因为这会严重低估概率值,乘法可能会通过高估概率来做相反的处理。 任何处理这个问题的策略将不胜感激。

Excel解算器优化每日幻想阵容

我对任何错误,第一次张贴,任何帮助将不胜感激,表示歉意。 我已经build立了一个Excel文件,用Excel的解算器来计算最佳的日常幻想阵容。 它通过一个循环来创造“最高得分”的阵容,然后是第二高的得分阵容。 目前,它允许我“locking”或“排除”玩家的问题; 不过我希望能够设定一个暴露限制。 例如,玩家A不应超过输出阵容的50%。 在vba代码中寻求帮助,一旦达到50%的标记就停止使用该玩家,或者如何在求解器中设置约束。 谢谢你的时间。 当前解算器设置的屏幕截图: If numoflineups > 1 Then For numoflineups = 2 To numoflineups Optlineup.Select SolverReset Solverok setcell:=Range("Result_score"), MaxMinVal:=1, ValueOf:=0, _ ByChange:="$D$2:$D$41", Engine:=2, EngineDesc:="Simplex LP" SolverAdd CellRef:="$D$2:$D$41", relation:=5, FormulaText:="binary" SolverAdd CellRef:=Range("drivers"), relation:=2, FormulaText:="Legal_Lineup" SolverAdd CellRef:=Range("Lock_Drivers"), relation:=2, FormulaText:="Legal_Lineup" SolverAdd CellRef:=Range("Exc_Drivers"), relation:=2, FormulaText:="Legal_Lineup" SolverAdd CellRef:=Range("Result_Salary"), relation:=1, FormulaText:="Max_Salary" SolverAdd CellRef:=Range("Result_Score"), relation:=1, FormulaText:=Range("Result_Score") […]

Excel求解器VBA,多个dynamicinput

我正在使用求解器加载项的Excel,我用它来优化问题。 然而,我正在靠墙运行我的头。 我必须说我不擅长擅长,所以这可能是一个简单的问题,但我已经在网上search了几个小时,所以我希望你能帮助我。 ByChange中设置的variables需要如下所示: SolverOk SetCell:="$A$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$B$4”:”$B$12”, “$C$4” 问题在于“$ B $ 12”可以并将根据包含在解决进度中的另一个因素(nRow)而全部改变。 然后我一直在使用这个: ByChange:= .Range(Cells(4 , 2) , Cells(4+nRow , 2).Address但是,我似乎不能将单元格“C4”添加到variables列表,它不断发出错误,不会运行我VBA脚本。 我希望你能帮助我。 非常感谢你 最好的问候Peter Hansen