我正在编写一个Java代码,该方法可以从任何迷宫中寻找出路,并且我需要一个检查生成的迷宫的类。只能使用class MyModule(torch.nn.Module):
def __init__(self):
super(MyModule,self).__init__()
# Feel free to use something more useful than a simple linear layer
self._network = torch.nn.Linear(...)
# Do your stuff
...
def fit(self, inputs, labels):
""" Trains the model to predict the right label for a given input """
# Compute the whitening matrix and inputs
self._zca_mat = compute_zca(inputs)
whitened_inputs = torch.mm(self._zca_mat, inputs)
# Apply training on the whitened data
outputs = self._network(whitened_inputs)
loss = torch.nn.MSEloss()(outputs, labels)
loss.backward()
optimizer.step()
def forward(self, input):
# You always need to apply the zca transform before forwarding,
# because your network has been trained with whitened data
whitened_input = torch.mm(self._zca_mat, input)
predicted_label = self._network.forward(whitened_input)
return predicted_label
,.
,#
,S
个字符。
X
和.
-允许在字符串的任何位置多次出现
#
和S
-允许在字符串的任何位置出现一个且不超过一个。
X
-第一个条件的正则表达式,
但是我不能实现第二个。
迷宫输入如下:
^[#//.]+$
。 -空白,#-墙壁,S-开始,X-退出
答案 0 :(得分:4)
您可以使用negative lookahead groups(写成(?!...)
)来实现此目的,就像这样:
^(?!.*S.*S)(?!.*X.*X)[SX.#]+$
此操作从字符串的开头使用S
接受字符集中的任何字符集(X
,.
,#
,^
)和[SX.#]+
。但它拒绝包含2个S
s((?!.*S.*S)
)或2个X
s((?!.*X.*X)
)的任何字符串。
请注意,这实际上检查了您的两个条件。您实际上并不需要2个正则表达式。但是,基于示例迷宫,您的输入看起来可以跨越多行。在这种情况下,您需要在最终的字符类中添加\n
。
答案 1 :(得分:1)
如果迷宫字符串由所有行组成,则可以使用一次先行断言仅声明一个S,然后仅匹配一个X(或相反)
^(?=[^S]*S[^S]*$)[.S#\r\n]*X[.S#\r\n]*$
在Java中
String regex = "^(?=[^S]*S[^S]*$)[.S#\\r\\n]*X[.S#\\r\\n]*$";
说明
^
字符串的开头(?=
正向前进,断言右边是S
的一次出现
[^S]*S
匹配0次以上任何没有S
的字符,匹配 S [^S]*$
匹配0+次任何不带S
的字符,字符串结尾)
提前关闭[.S#\r\n]*X
匹配所有接受的字符,包括不带X
的换行符,然后匹配 X [.S#\r\n]*
匹配所有接受的字符,包括不带X
的换行符$
字符串结尾{{3}}
答案 2 :(得分:1)