问题标签 [ms-solver-foundation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
346 浏览

c# - 如何定义一个约束以防止将资源分配给两个重叠的任务?

如何定义一个约束以防止将资源分配给两个重叠的任务?

我定义了 5 个资源:R1、R2、...、R5 和 3 个任务:T1、T2、T3,它们具有相应的开始和结束日期(s1、e1 代表第一个任务的开始和结束日期,s2、e2第二个任务等等)。如果这两个任务重叠,我的约束应该防止将 R1 分配给任务 T1 和任务 T2。R1 可以分配给任意数量的任务,因此如果 T1 和 T3 不重叠,它们都可以由 R1 执行。

我打算使用 C# 和 Microsoft Solver Foundation 来解决这个问题,但这当然不是那么重要。我的问题是我不知道如何将这个问题表述为一个约束。

0 投票
1 回答
323 浏览

c# - MS Solver Foundation CSP 错误 - 输入具有不同的符号域

我正在尝试使用 Microsoft Solver Foundation 来解决我们的家庭圣诞节抽奖(类似于“秘密圣诞老人”或“kris kringle”)。

我有一些复杂的限制(例如,不能为您的兄弟姐妹购买),我已经使用这些限制来修剪每个参与者的域。

求解器工作,除了它没有一个人应该只收到一份礼物的约束(即,爱丽丝为鲍勃买东西意味着没有其他人为鲍勃买东西)。

我尝试添加一个“AllDifferent”约束,但得到一个参数异常-

“输入 Alice 和 Bob 具有不同的符号域。”

我也尝试将约束添加为 OML 表达式,但遇到了同样的错误。

  • 是否可以在具有不同域的决策之间应用任何约束?
  • 如果没有,并且我需要对所有决策使用相同的域,是否存在“包含”约束?(我尝试使用“ElementOf”,但无法让它工作。)

示例程序-

0 投票
1 回答
2164 浏览

vba - Sheets().Select/Solver VBA 不工作

我的工作簿有三张纸,其中一张的名字是“数据”。

为什么 .select 方法不起作用?代码运行良好,没有给出错误,但从不选择/转到“数据”表......

我实际上希望工作表选择在 if 内,但如果它在那里,它会给出“9”错误:subscript out of range

理想情况下,我什至不想选择工作表 - 我想引用 Sheets("Data").Range(whatever),但这也会产生subscript out of range错误。

0 投票
1 回答
385 浏览

c# - 例外:无法将类型“Microsoft.SolverFoundation.Services.Term”隐式转换为“bool”

我遇到了一个例外

“无法将类型 'Microsoft.SolverFoundation.Services.Term' 隐式转换为 'bool'”

在以下代码中:

如何解决这个问题?

0 投票
1 回答
268 浏览

linear-programming - Adding constraints for a known solution causes out of bounds exception

I have a linear optimization goal to Maximize EE+FF, where EE and FF each consist of some C and D.

With code I've written, I can get solver to find:

...but I know there to be another solution:

In order to validate user input for other valid solutions, I added a constraint for both EE and FF. So I added the EE_quantity == 0, FF_quantity == 7 in the code below, which is a runnable example:

It seems that Solver Foundation really doesn't like this specific combination. Using EE_quantity == 1, FF_quantity == 6 is fine, as is using just EE_quantity == 0 or FF_quantity == 7. But using both, AND having one of them being zero, throws an exception:

Index was outside the bounds of the array.

What is going on under the hood, here? And how do I specify that I want to find "all" solutions for a specific problem?

0 投票
2 回答
2042 浏览

c# - Microsoft Solver Foundation 中的决策矩阵

我正在尝试使用 Microsoft Solver Foundation 来优化具有二元决策变量矩阵的问题。这是我的决策矩阵的格式:

X[i,j] = { { x11, x12, ..., x1n }, { x21, x22, ..., x2n }, ... { xm1, xm2, ..., xmn }, };

我还有一个参数向量,它取决于 Xij 矩阵(向量的每个元素都是 Xij 一列的总和:

Y[i] = { Sum(x11, x21, ..., xm1), Sum(x12, x22, ..., xm2), ..., Sum(x1n, x2n, ..., xmn) }

我知道我应该使用索引的决策对象,但我很难做到这一点。谁能帮帮我。我知道有两种索引决策的方法:

Decision Xij = new Decision(Domain.Any, "x", Some Set, Some other set);

还有:

有什么不同?

0 投票
1 回答
188 浏览

c# - Microsoft Solver Foundation 在添加约束时引发 ArgumentNullException

我正在尝试为呼叫中心创建一个时间表,我试图在高呼叫期间最大化员工并在低呼叫期间最小化。为简单起见,它看起来像:

简单的呼叫中心时间表

我有以下代码:

我在将员工限制为 9 小时(例如 4 15 分钟部分 * 9 小时 = 36 次)的约束条件下收到 ArgumentNullException。

这是堆栈跟踪:


在 Microsoft.SolverFoundation.Solvers.ConstraintSystem.ValidateInputs(CspTerm[] 输入) 在 Microsoft.SolverFoundation.Solvers.ConstraintSystem.Equal(Int32 常数, CspTerm[] 输入) 在 CSPCallCenterDemo.Program.Main(String[] args) 在 c: \Users\wdniels\Documents\Visual Studio 2012\Projects\CSPCallCenterDemo\CSPCallCenterDemo\Program.cs:System.AppDomain._nExecuteAssembly 的第 40 行(RuntimeAssembly 程序集,String[] args)在 System.AppDomain.ExecuteAssembly(字符串 assemblyFile,证据 assemblySecurity , String[] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback 回调, Object state, Boolean preserveSyncCtx ) 在 System.Threading。ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()


还有谁知道我如何添加一个约束来确保员工将连续工作 3615 分钟的间隔?

0 投票
0 回答
254 浏览

c# - 在背包算法中添加每件物品的数量约束

我正在工作的背包问题。有了可用的在线解决方案,到目前为止我已经做到了

现在我想添加一个约束,每件商品只允许一个数量。我创造了一个这样的约束,

但它总共只拿一件物品(0-1背包问题)。

如何添加约束以便在优化中只允许每个项目指定数量?

0 投票
1 回答
47 浏览

c# - Reporting shadow prices from SimplexSolver

I'm using the SimplexSolver class directly to solve a linear program, with AddRow, AddVariable and SetCoefficient. This works quite well.

We need to come up with shadow prices now, and I don't see any way to access either the shadow prices or the simplex matrix.

If I set SimpleSolverParams.GetSensitivityReport to true, casting the return of SimplexSolver.GetReport to ILinearSolverSensitivityReport may be the key here. Checking it out.

0 投票
1 回答
896 浏览

c# - Microsoft Solver Foundation 在某些情况下无法解决我的模型

我正在做一个生产计划项目,所以我想在一些机器(A,B)中找到一个订单生产开始时间。

为简化起见,我假设我有 2 台机器(机器 A 和机器 B)我有以下约束:

  • 出于简化目的,我认为每台机器只能在一天中的某些时间(A_TimeLimitation, )工作B_TimeLimitation

    • 机器A可以在以下范围内工作:

      (2014/12/4 00:00:00 - 2014/12/4 02:00:00) (2014/12/4 04:00:00 - 2014/12/4 06:00:00)

    • B机可在以下范围内工作:

      (2014/12/4 02:00:00 - 2014/12/4 04:00:00)(2014/12/4 05:00:00 - 2014/12/4 07:00:00)

  • 每个产品必须经过机器 A,然后经过机器 B。

  • 每个产品在每台机器上都需要一些时间(在我的示例中为 60 分钟)。
  • 机器 B 应在机器 A 完成工作后启动。
  • B 可以在 A 完成工作后最多 10 分钟开始工作。[更新]
  • 目标是最小化订单生产时间。

我使用以下代码将 a 转换DateTime为分钟:

var minutes = new TimeSpan(dateTime.Ticks).TotalMinutes;

所以使用上面的代码我的DateTime范围转换为Double范围。

我正在使用Microsoft Solver Foundation来解决问题,所以我使用了以下代码:

但是当我运行代码时,它似乎进入了一个无限循环,当我指定TimeLimitdirective的 10000 毫秒后,solution.Quality是否Unknown意味着MSF找不到任何解决方案,如果我删除DateTime机器中的第二个范围,A代码可以找到解决方案。

有谁知道问题出在哪里?