我正在尝试为游戏算法创建一个可解决性函数.基本上是一个函数,如果可以解决,它会为给定的游戏返回true或false.
该游戏是Buttonia.com(尚未实现该算法),这是一种熄灯游戏.基本上你有一个按钮网格,按下时,每个按钮都会改变它的某些邻居的状态.目前我生成随机游戏配置,然后尽可能应用启发式.其余的是由强力搜索决定的.
到目前为止,我的进步是建立一个方程系统来模拟游戏.由于每个按钮需要改变状态奇数次才能以向下状态结束,因此它的等式是这样的:
button_A = 1 - (button_1 + button_2 + ... + button_X)%2
其中button_1到button_X是按钮状态,对button_A有效.如果某些按钮不依赖于其他按钮,则可以立即解决这些按钮.其余的,我尝试一个配置,直到我遇到冲突,然后回溯.
目前,该算法适用于较小的游戏配置.我已经从3x3游戏测试了它,尺寸为10x10.其中6x6接近实际游戏的上限.
这些方程式大大减少了蛮力的搜索空间,使其变得实用.可能存在解决方程组的纯粹数学方法.
ascii中的3x3游戏示例(来自buttonia.com/?game=2964):
||#
-o-
+#|
Legend:
o = affect only self
- = affect left and right neighbors
| = affect above and below neighbors
+ = affect left, right, above and below neighbors
# = affect all 8 surrounding neighbors
Run Code Online (Sandbox Code Playgroud)
解决方案,按下这些:(0,0),(2,0),(1,2),(0,1),(1,1),(2,1)
这个游戏的等式:
Button_0_0 = 1 - (0) % 2
Button_1_0 = 1 - (Button_2_0) % 2
Button_2_0 = 1 - (0) …
Run Code Online (Sandbox Code Playgroud) 我是Matlab的新手.我希望你能帮助我.我必须使用ODE45函数来解决一个ODE系统.这是描述我的等同的功能.
function dNdt = rateEquations(t, y)
%populations of corresponding state
Ng = y(1);
Ns = y(2);
Nt = y(3);
%All constants used are dropped for the sake of easy reading.
Run Code Online (Sandbox Code Playgroud)
注意参数F.
%rate equations
dNs = s0 * Ng * F - Ns/ t_S1;
dNt = Ns / t_ISC - Nt / t_T1;
dNg = -dNt - dNs;
dNdt = [dNg; dNs; dNt];
end
Run Code Online (Sandbox Code Playgroud)
然后,在我的脚本.m文件中,我在'for循环'中调用ode45函数.在每次迭代期间,我必须更改参数F并将其传递给我的'rateEquations' - 函数.但我不知道如何实现它.
for T = Tmin: dt : Tmax
%initial conditions
initialConditions = [N0 0 0]; …
Run Code Online (Sandbox Code Playgroud) 有什么好的工具可以解决Linux上的整数程序吗?
我有一个小问题,我想计算以节省时间:D.它是一种子集和问题.我有一个大约20个整数值的列表,我想计算满足一定最小值的最小和的子集.你可以用整数程序来表达这个......就像这样
\sum_{i=1}^{n} w*x -> min
Run Code Online (Sandbox Code Playgroud)
同
\sum_{i=1}^{n} w*x >= c with x \in \{0,1\}
Run Code Online (Sandbox Code Playgroud)
或者还有其他好办法吗?
我正在开发一个项目,使用ODE求解器(ode45)在MATLAB中为算法创建GUI.所以我必须将MATLAB代码翻译成Java.问题是ode45求解器.Java似乎没有准备好使用的解算器,而ODE并不是我的专长.我是不是看起来不错,或者是否真的没有实现Java的ODE求解器?
谢谢
我一直在干扰C#中的一个想法来创建一个软件(用于伪个人使用),但遇到了实现问题.嗯......也许他们是我不知道的设计问题,但我只是简直无法弄清楚.
考虑我们有以下"数据库":
Foo + Bar = Foobar
Baz + Qux = Bazqux
Foobar + Bazqux = Foobarbazqux
Run Code Online (Sandbox Code Playgroud)
这些是用于创建所述项目的配方.使用一个和一个,我们创建一个结果,可以进一步成为另一个食谱的成分.Foo
Bar
Foobar
现在想我们需要找出该项目的完整配方Foobarbazqux
.对于人类的思想和智慧,它相对容易:
We need Foobarbazqux
Foobarbazqux = Foobar + Bazqux
Foobar = Foo + Bar
Bazqux = Baz + Qux
Foobarbazqux = Foo + Bar + Baz + Qux
Run Code Online (Sandbox Code Playgroud)
当然,如果我们拥有所有成分,我们可以"运行" 配方,并按照上面几段的顺序创建项目并执行每个配方.(那样:我们首先创建Foobar
,然后Bazqux
将两者结合起来得到最终结果.)
但在现实的时候,数据库是很多大.我想这就是计算机应该进入的地方.通过一个可用的软件,机器可以轻松找到所有的成分和执行(制作)步骤并将其提供给用户,因此我们不需要通过所有条目来读取手.
我是R的新手,我正在尝试为Excel中的Solver编写一个脚本.在下面的数据中,我列出了工作类型为AE的工人.每个工人都有工资和生产率.我想要做的是找到10个工人的最大产量,累计工资<100,000.限制是我需要总共10个工人,我需要2个来自工作类型AD,1个来自E,以及1个任何类型.
我用optim,IpSolve等搜索并搜索了一种方法,但是由于我的知识有限,我没有太多运气.
谢谢您的帮助!
Name Pos Salary Producton
Joe A 12001 13.1
Jim A 17753 23.5
Jill A 11447 14.8
Brian A 11447 14.8
Sally B 2171 1.2
Nancy B 4537 2.1
Francis B 2840 1.8
Ace B 2840 1.8
Bill C 3818 1.6
Ted C 11447 0.1
Henry C 2000 1.1
Kyle C 3818 1.6
Sam D 11447 0.1
Trevor D 2000 1.1
John D 4317 11.7
Jerome D 2000 1.1
Rebecca E 3818 1.6
Sunny E 11447 0.1
Britt …
Run Code Online (Sandbox Code Playgroud) r mathematical-optimization solver maximize integer-programming
我想要做的是将一组(n)项分成相同大小的组(大小为m的组,为简单起见,假设没有剩余,即n可被m整除).多次这样做,我想确保两个项目中没有一对项目在同一组中.
为了使这一点更具体,为了构建六个项目中的两个项目的组A..F
,曾经可以以不同的方式对该组进行五次分区:
(A, B)
,(C, D)
,(E, F)
(A, C)
,(B, E)
,(D, F)
(A, D)
,(B, F)
,(C, E)
(A, E)
,(B, D)
,(C, F)
(A, F)
,(B, C)
,(D, E)
同一组项目只能分为三组,不重叠对:
(A, B, C)
, (D, E, F)
(正如@DavidHammen在下面指出的那样,在这个例子中有不同的方法来制作分区.但是,一旦进行了一次分区,就不会有另一个第二次分割,它将所有项目对分开.这很好 - 我的应用程序没有不需要生成所有可能的全局分区方法,一个满足约束条件的解决方案就可以了
我现在的问题是:有没有办法有效地做到这一点?是否有技巧加速这些集的生成?
所以,到目前为止,我一直将此视为一个确切的覆盖问题,并使用回溯算法(DLX的变体)来解决它.这对于对很有效,但随着组变大,算法必须考虑爆炸的可能性的数量,并且处理变得非常难以处理.
我正在寻找的是加快速度的技巧.任何想法都非常受欢迎,特别是(但不限于): …
algorithm solver combinatorics constraint-programming disjoint-sets
我一直在探索VBA和excel,我一直在为Excel Solver编写一些基本代码.无论Excel解算器看起来多么强大,它对我的优化问题来说都不够快(一次迭代需要20分钟).
我一直在寻找并与更有经验的程序员交谈,并且一致认为VBA并不快,C++,C#,尤其是CUDA语言要快得多.
查看Excel中的VBA模块,Solver模块被密码锁定.我一直在寻找那个密码,它可以在几周内获得,但无济于事.
问题:可以获取此密码吗?如果是这样,怎么样?它可以从微软购买吗?多少?
目标:使Solver VBA能够将其转换为C#或C++,以使优化过程更快.
PS我看过微软解决方案基金会,但没有帮助.
谢谢.
我看到了一个类似的问题,但我不知道,该怎么做.也许你可以帮忙.
ES <- function(y, z){-y * (1-pnorm(y/z)) + z * dnorm(y/z)} # = x
ES(906.19, 707.1) #33.47587
Run Code Online (Sandbox Code Playgroud)
我想要的是为y求解,所以z和x(33.4)是已知的.我已经看到了solve和optim函数,但是我无法获得预期的结果.
谢谢!