考虑一下沿着Tower Solitaire,Tripeaks或Fairway Solitaire线路的纸牌游戏:桌子上有一些可立即使用的牌,每张牌都可以覆盖下面的其他牌(阻止他们玩牌).你有一张"基础"牌,你可以从桌子上取出一张牌,如果它只是你的基础牌之上或之下的一个等级,那么它就成了你的新基础牌.当您无法从牌桌上打牌时,您可以使用有限数量的替换牌进行抽牌,因此您通常希望尽可能打出最长的牌.
首先,您如何代表董事会以便寻找解决方案?其次,你会用什么算法来找到最长的可玩序列?
例:
-4a- -5- -3- -2- -4b-
底部卡片卡在顶部被移除:你不能删除4a,直到3和2都消失.假设您的起始牌是王牌,这里的最佳游戏将是2,3,4b,5,4a.(你可以玩2,3,4a,但那不太好.)
我想这应该表示为某种有向图.你有从3和2到4a以及从2到4b到5的边缘,但你是否还有3到2之间以及4a和5之间的边缘,因为一个可以在另一个之后播放?如果是这样,它们是否可以按任意顺序播放(3然后2,或2然后3)这样的事实会在图形中形成一个循环,阻止您使用有效的"最长路径"算法?(我相信如果图形包含循环,在图形中找到最长的路径是NP完全的.)
我的数独求解方法存在问题.该计划的工作方式如下; 当电路板启动时,它是空的,用户在电路板上添加了几个数字,然后点击一个Solve按钮,程序试图解决它.如果我将相同的数字放在同一行中,一切正常.因此,如果用户添加1,1,0,0 ... 0.在拼图中它无法解决它,因为它的两个1彼此相邻并且将继续尝试找到一个沉闷,即使它是无法解决的难题.但是,如果它们都是0(空),它将立即解决它,就像Id在左上角放置1和2一样.如果我只是在其中放入一些随机数将检测到它无法解决(或者如果它是一个有效的谜题将解决它)
我正在考虑说什么theNumber == (row, col) equals thenNumber == (row+1, col)
,它应该return false
是因为它是一个重复的数字.
这是我试图在solve方法中添加的代码,显然没有成功.
if ((puzzle.getNum(row, col) == a) == (puzzle.getNum(row + 1, col) == a)) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
非常感谢帮助
我有一个围绕一个名为Lights Out的小游戏的任务。
游戏由一个尺寸为 3x3 的棋盘组成,其中每个单元格可以是 1 或 0,例如:
0 1 0
1 1 0
0 0 0
Run Code Online (Sandbox Code Playgroud)
当所有单元格都为 1 时,游戏就被解决了,所以:
1 1 1
1 1 1
1 1 1
Run Code Online (Sandbox Code Playgroud)
并且在每一轮中,用户都可以单击任何单元格,这将翻转其状态以及向左、向右、向上和向下(如果存在)的邻居的状态。因此,单击第一个示例板中间的单元格将产生:
0 0 0
0 0 1
0 1 0
Run Code Online (Sandbox Code Playgroud)
现在我必须为游戏找到最糟糕的初始棋盘,并计算出如果玩得最佳,它需要多少回合才能达到已解决状态。
我试图编写一个递归求解器,在给定初始棋盘的情况下,它会找到解决游戏的最佳回合顺序。在那之后,我想用所有可能的初始板来喂养它。
但是,递归遇到堆栈溢出。所以我可能不得不以迭代的方式重写它。我怎样才能做到这一点?
这是代码,作为最小的完整示例:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.StringJoiner;
import java.util.stream.Collectors;
public class GameTest {
public static void main(String[] args) {
boolean[][] board = {
{false, false, false},
{false, true, false}, …
Run Code Online (Sandbox Code Playgroud) 是否有一个模块可以找到函数的所有零,而不是它在指定起点之外遇到的第一个零?
使用brentq
,我们将指定函数更改符号的位置,并且仅选取该位置,除非使用了这次n
。类似地,对于fsolve
,我们选择一个起点,然后它找到该点之后的第一个零,并且我们必须再次这样做n
。当然,我怎样才能n
在一个呼叫中找到所有位置。n < infinity
我想到的函数是 3 个零,如下所示:
import numpy as np
import pylab
from scipy.optimize import brentq
mm = 7.3477e22 # mass moon
me = 5.9736e24 # mass Earth
r12 = 384400.0 # distance between the Earth and the moon
pi2 = mm / (me + mm)
def f(xi):
return ((1.0 - pi2) / np.absolute(xi - pi2) ** 3.0 * (xi + pi2) +
pi2 / np.absolute(xi + pi2 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为游戏算法创建可解函数。基本上是一个函数,如果给定的游戏可解或不可解,则返回 true 或 false。
该游戏是一种熄灯游戏。基本上你有一个 M*N 的按钮网格。当游戏开始时,这些灯的随机数字或存储模式被打开。按下任何一个灯都会切换一个由四个按钮组成的正方形,包括按下的按钮。
所以我正在寻找一种算法,如果我们可以关闭所有灯,则返回 true;如果我们不能这样做,则返回 false。
我想从数字的角度理解混合建模(特别是状态事件)背后的一般思路(虽然我不是数学家:)).鉴于以下Modelica模型:
model BouncingBall
constant Real g=9.81
Real h(start=1);
Real v(start=0);
equation
der(h)=v;
der(v)=-g;
algorithm
when h < 0 then
reinit(v,-pre(v));
end when;
end BouncingBall;
Run Code Online (Sandbox Code Playgroud)
我理解的概念when
和reinit
.
when
声明中的等式仅在条件成立时才有效吗?2sec
.由于我使用多步求解器,这意味着求解器"超过2秒",识别出h<0
(假设在模拟time = 2.5sec
中h = -0.7
).这是什么意思"使用交叉函数搜索事件的时间?是否有简单的解释(示例)?pre()
在这种情况下,操作意味着什么?noEvent()
:"表达式是字面意义而不是生成交叉函数.由于没有交叉函数,因此没有要求表达式可以在事件限制之外进行评估":这是什么意思?给出与弹跳球相同的例子:求解器在时间2.5检测到h = 0.7.有没有区别noEvent()
?在这段代码中:
import cvxpy as cvx
# Examples: linear programming
# Create two scalar optimization variables.
x = cvx.Variable()
y = cvx.Variable()
# Create 4 constraints.
constraints = [x >= 0,
y >= 0,
x + y >= 1,
2*x + y >= 1]
# Form objective.
obj = cvx.Minimize(x+y)
# Form and solve problem.
prob = cvx.Problem(obj, constraints)
prob.solve(warm_start= True) # Returns the optimal value.
print ("status:", prob.status)
print ("optimal value", prob.value)
print ("optimal var", x.value, y.value)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方式来选择温暖的起始值自己(例如:X …
在尝试了很多事情之后,我认为询问 SO 会很好。我的问题很简单:如何使用 Sympy 求解以下方程?
我想为 lambda_0 解决这个问题,它q
是一个大小数组,J
包含 0 和 1 之间的元素,这些元素的总和为 1(离散概率分布)。我尝试了以下方法:
from sympy.solvers import solve
from sympy import symbols, summation
p = [0.2, 0.3, 0.3, 0.1, 0.1]
l = symbols('l')
j = symbols('j')
eq= summation(j*q[j]/(l-j), (j, 0, 4))
s= solve(eq, l)
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误,q[j]
因为这里j
是一个Symbol
对象而不是整数。如果我不j
作为符号,我将无法评估eq
表达式。有谁知道如何做到这一点?
编辑: p = 1-q
在上面,因此q[j]
应该被替换为(1-p[j])
.