问题标签 [solver]

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 投票
2 回答
1079 浏览

excel - 无法让 if 语句在 VBA 中工作

我的第一个问题是 excel VBA 是否会识别带有两个约束的 if 语句,即

因为当我知道在我正在运行的脚本中满足两个约束时,我无法将包含在 if 语句中的代码触发。可能是我的逻辑有问题。

我已经包含了代码,请看看您是否可以指出我的逻辑或 VBA 中的任何错误。背景信息(我还在代码中包含了一些):

有两个杠杆可以改变单元格 F71(D40 和 D41)。要求是 F71 大于 0,并且必须小于 F71 的当前值(保存在变量 currentValueAdd 中)。

所以我遍历两个层,遍历所有可能的组合,试图找到满足上述条件的最佳组合。有时我打开excel,它工作正常,有时它根本不起作用。结果非常不稳定。

0 投票
1 回答
328 浏览

java - 迷宫算法有点工作。一些迷宫,不是所有的帮助

我使用的迷宫算法在某些时候有效,但并非一直有效。它使用递归,但我无法弄清楚为什么它一直没有。

0 投票
2 回答
1443 浏览

java - 帮助使用 Java 解决 D&D 迷宫

我一直在阅读在 stackoverflow 上发布的其他一些问题,我对搜索算法的数量感到有点不知所措。我不是在寻找代码和更多超越算法背景的页面,也许还有一些 sudo 代码。我知道有像 A* 这样的算法,但由于时间不够,我不知道我是否能够用这个算法完成程序。迷宫是使用服务器程序生成的,求解器连接到服务器,以便向更多玩家块发送命令。我无权访问服务器程序中的方法。我必须解决一个像 D&D 迷宫一样的迷宫。以下是游戏的基本概述:

经典的 D&D 电脑游戏由地牢(迷宫)组成,游戏的目的是穿过地牢,从迷宫的“入口”进入并在“出口”退出。为了使事情更具挑战性,地牢的布局是先验未知的,并且必须通过使用沿线发现的物体(车费、梯子和钥匙)来克服障碍(僵尸、沥青坑和门)。方式。

我注意到许多其他帖子不必担心完成迷宫的障碍,这是调整算法以补偿障碍的主要问题吗?我想知道像右手法则这样的东西是否可以解决迷宫问题,如果不是,那么解决迷宫问题的算法是什么(由于我必须尽快完成程序)。任何其他链接都会很棒,因为我知道我必须在 Objective-C 中再次完成这个程序,并且我想在发生这种情况时实现比右手规则更强大的东西。谢谢你的帮助。

0 投票
1 回答
857 浏览

matlab - MATLAB 中的 ode 求解器事件位置索引

假设我正在尝试使用odeMATLAB 中的求解器求解微分方程组。

假设我已经定义了一个事件函数来定位三个不同的事件,它们都是终端。

我注意到在某些情况下,ie在其中一个事件的位置返回的数量(ie是停止求解器的事件的索引,在我的情况下它可能是 1、2 或 3)并不总是一个数字但是一个带有两个元素的向量(通常这些元素是相同的)

在那些ie不是标量的情况下,是它ie(1)还是ie(2)停止了求解器?

0 投票
1 回答
13123 浏览

function - Matlab ode45。如何在调用时更改其中的参数?

我是 Matlab 的新手。我希望你能帮助我。我必须使用 ODE45 函数解决 ODE 系统。这是描述我的方程式的函数。

注意参数 F。

然后,在我的脚本 .m 文件中,我在“for 循环”中调用 ode45 函数。在每次迭代期间,我必须更改参数 F 并将其传递给我的“rateEquations” - 函数。但我不知道如何实现它。

在调用 ODE45 F 之前要更改。

等等 ...

提前致谢。

0 投票
1 回答
1933 浏览

matlab - MATLAB 中的事件位置问题

假设在matlab中如下:

[t, x, te, xe, ie] = ode15s(@myfunc, [tStart tFinal], x0, odeset('Events', @events));

问题 1

1a) 该函数在求解器成功执行后events调用。这是真的?

1b)在求解器成功执行步骤之后,是否有可能最后一次调用myfunc 不是导致成功步骤的调用?

1c) 如果events函数包含多个终端事件,并且在成功的步骤中检测到其中两个(不仅仅是一个)已经发生,求解器的行为是什么?

问题2

假设myfunc包含以下代码

check的某个函数在哪里x

解决此问题的一种方法是使用事件函数。根据我的经验,ode 求解器可以通过这种方式解决此类问题。

解决此问题的另一种方法是使用事件函数进行定位check(x) - 2 == 0,一个终端事件用于定位,direction = 1另一个用于定位direction = -1。在求解器在任一事件上停止后,全局变量例如myvar被适当地设置以区分这两个事件,然后模拟从它停止的地方继续。在这种情况下,代码myfunc将是

在简单的情况下,两种方式都会产生正确的结果。但是我正在尝试解决一个非常复杂的问题(除上述之外的其他事件以及微分方程的不连续右手部分在某些情况下被证明是可解的)并且我试图找出一种方法是否会产生不同的结果比第二个。

有人可能会说 ode 之前要么无法返回解决方案,tFinal要么返回正确的解决方案,但由于右手部分的不连续性,当存在解决方案时,求解器可能不会返回解决方案。

所以从某种意义上说,问题是:使用第一种方式和第二种方式之间的实际理论区别是什么?

0 投票
2 回答
1171 浏览

python - 关于为 Vexed 级别编写求解器的建议

Vexed 是一款流行的益智游戏,有许多版本可用(其中一些是 GPL 自由软件)。非常适合小屏设备;版本可用于 Android、iOS 等。我在 PalmOS 平台上发现了它。

只是为了好玩,我想写一个求解器来解决 Vexed 级别。

Vexed 是一款方块滑动益智游戏。简而言之,以下是规则:

0)每个级别都是一个正方形网格,以不可通行的边界为界。在任何关卡中都会有一些实心方块,它们是无法通过的。有一些不同颜色的块;这些可以放在底部边框上,放在实心方块上,或者放在其他块(不同颜色)上。大多数级别是 8x8 或更小。

1) 你唯一能做的就是向左或向右滑动一个方块。每走一格算作一次移动。

2)有重力。如果在你滑动一个方块后,它不再停留在一个实心方块或另一个方块上,它会下落,直到它停留在另一个方块、一个实心方块或底部边框上。请注意,您永远无法再次抬起它。

3) 任何时候两个或多个相同颜色的方块接触,它们就会消失。请注意,链是可能的:如果支撑块消失,则支撑在其上的块会掉落,这可能导致更多相同颜色的块接触并因此消失。

4)目标是使所有块在最少的移动次数内消失。每个级别都有一个“标准分数”,它告诉您最少的移动次数。(在最初的 PalmOS 游戏中,“标准分数”不一定是最低的,但在我最近玩的 Android 版本中,它是最低的。)

以下是包含 PalmOS 版本游戏源代码的 SourceForge 项目:

http://sourceforge.net/projects/vexed/

我是一位经验丰富的软件开发人员,但我还没有在 AI 方面做过任何工作(寻路、解决问题等),所以我正在寻找建议,让我指出正确的方向。

目前,我可以看到我要追求的两个基本策略:

0) 只需编写一个蛮力求解器,可能是为了速度而用 C 语言,它会遍历每场比赛的所有可能解决方案,并返回所有解决方案的列表,最好的一个在前。这是一种合理的方法,还是可能的移动总数会使这太慢?我认为不存在任何大于 10x10 的关卡。

1) 学习一些 AI-ish 算法,并以聪明的方式应用它们来解决问题,可能使用 Python。

请注意,PalmOS Vexed 的源代码包括一个求解器。根据作者的说法,“求解器使用带有剪枝启发式的 A* 来寻找解决方案。”

http://www.scottlu.com/Content/Vexed.html

因此,我可以采用的一种策略是研究 A* 算法,然后研究现有求解器的 C++ 代码并尝试从中学习。

我将用 Python 和 C 标记对此进行标记,但如果您认为我应该使用其他东西,请进行销售宣传,我会考虑的!

这是来自“Variety 25 Pack”的一个级别的 ASCII 艺术;48级,“黑魔王”。我能够解决大多数关卡,但这个关卡让我很烦恼。这个级别的标准杆分数是 25 步,但我还没有解决它!

在这张图片中,边框是下划线、竖线和等号字符。填充方块是“#”。空位是空格字符。彩色块是“g”(绿色)、“b”(蓝色)和“p”(紫色)。

顺便说一句,我可能会将求解器的输入文件格式设置为关卡的 ASCII 艺术,就像这样,但没有繁琐的线条边框字符。

感谢您的任何建议!

编辑:

我已经接受了一个答案。感谢给我答案的人。

这是一个半蛮力求解器。它没有使用 A*,但它正在削减无利可图的短枝。

它读入一个带有关卡数据的简单文本文件。字母是块,“_”(下划线)是空格,“#”是填充空格。

这是一个示例级别文件:

在我的电脑上,考虑到 14252 种不同的板配置,它几乎在 10 秒内就解决了“黑魔王”。我用 Python 2.x 而不是 Python 3 编写的,因为我想用 PyPy 试试这个,看看它有多快。

接下来我应该努力将 A* 应用于此。我想我可以制定一个指标,例如“将橙色块移向另一个橙色块而不是移开”并尝试将其计算在内。但我确实希望所有解决方案都能弹出,所以也许我已经完成了。(如果有三个解决方案都是最小移动数,我想看到所有三个。)

欢迎对这个 Python 程序发表评论。我写得很开心!

编辑:我确实用 PyPy 试过这个,但直到现在我才更新这个。在我使用 PyPy 的计算机上,求解器可以使用 CPython 在 10 秒内解决“黑魔王”关卡;PyPy 下降到 4 秒。很酷的部分是我可以看到JIT 启动时的加速:这个程序在工作时打印点,在 PyPy 下我可以看到点开始变慢,然后只是加速。PyPy 很漂亮。

0 投票
1 回答
1230 浏览

c++ - 用于未定方程系统的 C++ 库

我一直在寻找 C++ 中的库来解决像这样的未确定系统

q 是一个向量,w, x, y, z 变量和 a,b,c,d 常数。

英石

找到求解器、算法等会非常有用。我发现了几个库能够解决未确定的系统,但另外我需要最小化系数之间的距离。

先感谢您

阿尔托伯

0 投票
1 回答
1080 浏览

java - How to set decision variables types like binary, int, double in Apache Commons Math SimplexSolver?

How to set decision variables types like binary, int, double in Apache Commons Math SimplexSolver? The output of the program below is this:

I want decision variables to be of type int not double; output should be 333, 0, 8325 if solved as integer decision variables.

0 投票
2 回答
4328 浏览

matlab - matlab如何求解大型、对称和稀疏的线性系统

也就是说,当我A\b为一个非常大的、对称的和稀疏的 A 做时,matlab 使用什么算法?