Tag: 优化

将最佳值设置为任何给定的指定值

我正在使用开放求解器来解决优化问题。 问题如下: 假设我正在优化与给定的总成本约束和input可用性的input。 我们有投入成本,想要最小化成本。 另一个约束是优化input落在任何设定值中,比如input11,input12,input13和input14。 这个离散input范围因input而异。 所以我们有3个约束: 预算, 每个input的input容量和 投入应落入四个选项中的任何一个。 我创build的代码部分: Sub TestOpensolver() Dim TestSheet As Worksheet Set TestSheet = Worksheets("Optimized_Results") OpenSolver.ResetModel Sheet:=TestSheet 'Objective Definition OpenSolver.SetObjectiveFunctionCell TestSheet.Range("AC3"), Sheet:=TestSheet OpenSolver.SetObjectiveSense MinimiseObjective, Sheet:=TestSheet 'Variables Definition OpenSolver.SetDecisionVariables TestSheet.Range("AK3:AK8"), Sheet:=TestSheet OpenSolver.SetDecisionVariables TestSheet.Range("AQ3:AR8"), Sheet:=TestSheet ' Constraints OpenSolver.AddConstraint TestSheet.Range("AK3:AK8"), RelationLE, TestSheet.Range("W3:W8"), Sheet:=TestSheet OpenSolver.AddConstraint TestSheet.Range("AK3:AK8"), RelationGE, TestSheet.Range("X3:X8"), Sheet:=TestSheet OpenSolver.AddConstraint TestSheet.Range("AS3:AS8"), RelationLE, TestSheet.Range("AT3:AT8"), […]

用多个标准优化vlookup(索引+匹配)

我有一个12×18的Excel范围,根据12×18范围的页面,行和列标题(分别为标准1,标准2和标准3)从823×20图表( Results!$A:$T )绘制数据。 ={INDEX(Results!$A:$T, MATCH(1, (criterion1 = Results!$A:$A) * (criterion2 = Results!$B:$B), 0), MATCH(criterion3, Results!$A$1:$T$1, 0))} 正如你所看到的,并不是那么多的数据,但是当我改变页面标题的时候,我的电脑(带有24GB内存的2GHz Intel Xeon)花费了大约一分钟来更新216(12×18)索引search,米甚至没有创buildsearch的一半。 在我的项目早些时候,这些search只有一个标准,所以我使用了VLOOKUP() ,结果来得很快。 不过,现在我需要根据三个标准来find值,上面的函数是我设法完成这个的最好方法。 然而,这似乎是我得到的长时间计算的责任。 所以我的问题是: 我怎样才能优化VLOOKUP()的多个标准? 我应该调整INDEX(1, MATCH()*MATCH(), MATCH())还是有更快的方法来做到这一点? 以下是12×18索引search的示例(分支名称是最终用户将能够更改的唯一variables): 在823×20表格中,它search(A列实际上没有合并):

在C ++中寻找优化algorithm来代替Excel Solver

因为Excel求解器在数千次优化(因为它使用电子表格作为接口)上运行速度很慢,所以我试图在C ++中实现一个类似的(特定于问题的)求解器(使用Visual Studio 2010,在Win 7个64位平台)。 我将通过VBA中的Declare语句包含DLL,并且已经有了这方面的经验,所以这不是问题。 我的问题是最小化经验数据与非线性但平滑的目标函数之间的平方误差的总和,问题将包括非负性(X> = 0)或甚至是正性约束(例如X> = 0.00000001) ,X代表决策variables。 我正在寻找一个强大的,经过validation的实现。 它可能是已build立的图书馆的一部分。 例如,我已经研究了ALGLIB存储的内容(请参阅http://www.alglib.net/optimization/ ),似乎只有其中一个algorithm接受有界约束。 但是我不知道这是值得的,这就是为什么我要收集一些意见。 或者,另一方面,如果用这种基本约束来增加ALGLIB的Levenberg-Marquardtalgorithm是可取的,例如通过拒绝不符合我的约束条件的每个中间解决scheme? (猜测不会这样做,但仍然值得一提)

Excel VBA在循环浏览filter时优化了速度

最终解决scheme编辑 首先,我很抱歉这花了这么长时间。 写完这篇文章之后不久,我就出城了,然后把这个项目拉下来,直到最近我能抽出时间去处理这个项目。 杰里给了我一个在行标签上使用组的好主意,而不是试图一次过滤一个date。 经过一些修改后,我能够以更快的速度满足我的需求。 最慢的时候,我把时间从5分钟缩短到45秒,而且随着时间的推移,我还想优化。 这是一个很好的方法,允许我更新几个相关的数据透视表。 对于那些可能会觉得有用的代码,请注意它包含了很多额外的function: Sub Filter_PivotField_by_Dates(TargetPvtFld As PivotField, dtFrom As Date, dtTo As Date, _ Optional dtFrom2 As Date, Optional dtTo2 As Date) ' Filter the dates on all related pivoted tables via a grouping method. ' Variables —– Dim bMultiRng As Boolean Dim iPvtTblRowCnt As Integer, iPvtTblColCnt As Integer, i […]

在VBA Excel中优化双循环的性能

我很想知道在双循环中执行一组指令的最快方式,以循环遍历二维单元格范围。 我的代码将是这样的: Sub Test() For i = 1 To 1000000 For j = 1 To 10 'It can be more than 10 'I put a set of instructions here Next j Next i End Sub 例如,假设我编写了一个简单的代码来实现这样一个下面的任务: Sub Test1() T0 = Timer For i = 1 To 1000000 For j = 1 To 10 Cells(i, j) […]

用户在Excel中定义的函数和速度问题

我有一个使用几乎所有UDF的Excel模型。 有说120列,400多行。 计算是垂直进行的,然后进行水平方向—即首先完成第一列的所有计算,然后第一列的最后输出是第二列的input等。在每一列中,我称之为六个或七个UDF调用其他UDF。 UDF经常输出一个数组。 每个UDF的input是一些variables,一些范围variables,一些双打。 在访问内容之前,范围variables在内部被转换为数组。 我的问题是,我可以build立没有UDF的Excel模型,当我运行模拟时,我可以在X小时内完成所有的计算。 当我使用UDF时,仿真时间是3X小时或更长。 (为了回答这个显而易见的问题,是的,我需要和UDF一起工作,因为如果我想对模型做一些小的修改(比如说添加另一个资产types(这是一个财务模型)),重build模型需要将近一天的时间没有UDF来适应新的法律/金融结构,UDF需要大约20分钟来适应不同的财务结构。) 在任何情况下,我已closures屏幕更新,没有复制和粘贴的function,Varianttypes的使用是最小的,所有的数据都包含在一张表中,我将所有范围typesvariables数组之前,获取内容。 除了让一台速度更快的计算机或等价物使VBA代码/ Excel文件运行得更快之外,我还能做些什么? 请让我知道这是否需要更多的澄清。 谢谢!

为什么在VBScript中快速写入Excel单元格值,但在PowerShell中速度慢?

为什么在VBScript中将单元格值写入Excel比在PowerShell中快得多? PowerShell不是新事物,而VBScript是不赞成的MS脚本语言? VBScript的例子(保存到filename.vbs)这运行在一瞬间。 Set objExcel = CreateObject("Excel.Application") objExcel.Visible = false Set objWorkbook = objExcel.Workbooks.Add() ' Edit: increased number of writes to 500 to make speed difference more noticeable For row = 1 To 500 'Edit: using .cells(row,1) instead of .cells(50,1) – this was a mistake objWorkbook.workSheets(1).cells(row,1).value = "test" Next objWorkbook.SaveAs(CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) & "\test.xlsx") objExcel.Quit msgbox "Done." […]

VBAmacros快速删除行

我有几个非常大的ex​​cel数据文件,我需要通过它们,并删除T列中单元格的值为1的所有行。现在我的代码如下所示: Sub test() Dim cell As Range For Each cell In Worksheets("Sheet1").Range("T5", "T900000") If cell.Value = 1 Then cell.EntireRow.Delete End If Next cell End Sub 这似乎是工作,但需要永远跑,我将不得不这样做了很多次。 有没有更好的方法来做到这一点,或者有什么办法来优化我已经有的运行速度?

如何在C#中实现Excel求解器function?

我在C#中有一个应用程序,我需要做一些优化计算,像Excel Solver插件一样,一个选项当然是写我自己的解算器实现,但我有点时间不够,所以我正在调查已经存在的图书馆可以帮助我。 我一直在尝试Microsoft Solver Foundation,它看起来非常整齐,很酷,问题在于它似乎不适用于我需要做的那种计算。 在这个问题的最后,我添加了有关我需要执行和优化的计算的信息。 所以基本上我的问题是,如果你们中的任何一个知道我可以用于这个目的的任何其他库,或者任何可以帮助我解决问题的教程,或者任何能够帮助我解决这个问题的想法。 谢谢。 附加信息: 这是我需要计算的数据: 我有7个variables,让我们叫他们var1,var2,…,var7 这些variables的约束是: 所有这些都需要是0 <= varn <= 0.5(其中n是variables的编号) 所有variables的总和应该等于1 目标是最大化目标公式,在Excel中看起来像这样: (MMULT(TRANSPOSE(L26:L32),M14:M20)) / (SQRT(MMULT(MMULT(TRANSPOSE(L26:L32),M4:S10),L26:L32))) 在此公式中看到的范围L26:L32实际上是具有上面variablesvar1,var2,…,varn的范围。 M14:M20和M4:S10是我从不同来源获得的数据范围,十进制值更可能。 正如我之前所说的,我使用的是Microsoft Solver Foundation,我用它来模拟几乎所有的东西,我创build了处理目标公式操作的函数,但是当我试图解决模型时总是失败,我认为这是因为操作的复杂性。 无论如何,我只是想显示这些数据,所以你可以有一个关于我需要实现的计算types的想法。

XSSFWorkbook需要花费很多时间来加载

我正在使用下面的代码: File file = new File("abc.xlsx"); InputStream st = new FileInputStream(file); XSSFWorkbook wb = new XSSFWorkbook(st); xlsx文件本身有25,000行,每行有500列的内容。 在debugging过程中,我看到第三行创build了一个XSSFWorkbook,需要大量的时间(1小时!)来完成这个语句。 有没有更好的方式来访问原始的xlsx文件的值? 谢谢Abhishek S