jinyou 发表于 2009-7-23 17:03:30

“会多次比较(从左上角比到右下角)”
为什么这样比?
应该从中心螺旋向外,基本上能做到较早命中。
以中心螺旋向外的次序,假设获得一个大于50%的相似值后,还会有更大值出现吗?有没有例子呢?

sokoban 发表于 2009-7-23 17:51:46

因为匹配百分比是以待找推箱子图案为基准的。如果待找图案是关卡库里面某一个关卡的局部(也就是说和这个局部一模一样),那么 SokoFind 程序认为匹配百分比是 100%。所以按照从左上倒右下的顺序,还是按照中心螺旋向外顺序查找,哪种顺序快一些好像要看运气了。

[ 本帖最后由 sokoban 于 2009-7-23 18:00 编辑 ]

anian 发表于 2009-7-23 23:16:16

原帖由 jinyou 于 2009-7-23 13:41 发表 http://bbs.mf8-china.com/images/common/back.gif
那些进行搜查的关卡,基本上不再改变,是否先做好规格化加以保存,空间换时间。
你的程序在读入XSB Pattern后,检测到不能规格化的就是局部,就自动加方形外墙,而不该要求输入者加。除非你的编辑框能提供列编辑模式 ...


之前也考虑过先做好规格化加以保存,以空间换取时间。
但由于个人认为“一个关卡搜查程序不应该对被搜查的关卡文件做任何编辑”的缘故, 就没有做。

我喜欢尽可能的将关卡原汁原味收藏, 不想去掉任何东西。

但如果有人想以空间换取时间而且把关卡先做好规格化, 可以考虑在SokoFind加入一个选择叫 “关卡已经规格化”。
如果这个选择已选, SokoFind就不再做关卡规格化。

也可以考虑再出一个程序来专做关卡规格化。
其实我已经有这样的一个程序, 只是没有一个友善的界面。


关于XSB Pattern, 当初也考虑过不用外墙或自动加方形外墙。
如果不用外墙, 就会对关卡的局部输入有所限制。
例如, 你就不能输入方形墙里面的局部关卡。

#########
#-------#
#-------#
#--.$---#
#--$.@--#
#---.$--#
#-------#
#########

也是因为空位置的问题而不能自动加方形外墙。
还有, 目前XSB Pattern窗口可以有不是XSB格式的东西如注解(comment)。
  (你也可以拖拉一个“局部关卡”的文件到XSB Pattern窗口来做输入。)

为了不想对局部关卡的输入有任何限制,最终就选择了现在的做法。
当然, 最好就是编辑框能提供列编辑模式。 这就要看Sokoban兄了。

[ 本帖最后由 anian 于 2009-7-23 23:25 编辑 ]

jinyou 发表于 2009-7-26 10:32:15

有关预先规格化,就是说把规格化好的东西另存一遍,我就放到一个数据库里,只要把关卡名写上。我就能只接找原关。
我现在是人工取了两行中的两个字符串,就能搜索出不多的题目了,再人工判断。没有考虑相似度。

anian 发表于 2009-7-28 03:04:25

人工选取两行中的两个字符串来做搜索, 有时候后果很好, 有时候后果不好。

以下这个关卡是Sokoban兄发表过的, 不知道金优兄是选取两行中的那两个字符串来做搜索?
   
#########--############
#-------#--#----------#
#.#####-####-###-####-#
#--#-#--*-*--#---#-#--#
#$-#-#-----#-#---#-#-@#
#--#-#####-#-#---#-#--#
####-#---#-#-#---#-####
-----#-#*--#-##--#-----
-----#---###*-#--#-----
-----#--*#----#--#-----
-----#-#---#--#--#-----
-----#---#-#####-#-----
-----#####-#---#-#-----
---------#--*--#-#-----
#############-##-######
#---------------------#
#######################



HHHHHHHHH__HHHHHHHHHHHH
H_______H__H__________H
H.HHHHH_HHHH_HHH_HHHH_H
H__H_H__*_*__H___H_H__H
H$_H_H_____H_H___H_H_aH
H__H_HHHHH_H_H___H_H__H
HHHH_H___H_H_H___H_HHHH
_____H_H*__H_HH__H_____
_____H___HHH*_H__H_____
_____H__*H____H__H_____
_____H_H___H__H__H_____
_____H___H_HHHHH_H_____
_____HHHHH_H___H_H_____
_________H__*__H_H_____
HHHHHHHHHHHHH_HH_HHHHHH
H_____________________H
HHHHHHHHHHHHHHHHHHHHHHH



还有, 你能找到原关吗?

[ 本帖最后由 anian 于 2009-7-28 03:05 编辑 ]

jinyou 发表于 2009-7-28 17:17:25

我在老封当时收集的1万多关中查找。

输入某列的一段 #*_#_*_*__# 可以找到sven 1307

-#####-------#####-
-#---#########---#-
-#@*--#------$--$#-
-##-#-$-$$-$-##--#-
--#-#----####--#-#-
--#-#####---#----#-
--#------*--#-*#-#-
--##-#####-###-#-#-
---#*----#-----#-#-
---#--##-##-####-#-
-###*-#-*-*--#.#-#-
-#----#-#--#-#.#-#-
##-#--#------#.#-##
#-*###########.#--#
#------------#---.#
#--#########---##.#
####-------########



_HHHHH_______HHHHH_
_H___HHHHHHHHH___H_
_Ha*__H______$__$H_
_HH_H_$_$$_$_HH__H_
__H_H____HHHH__H_H_
__H_HHHHH___H____H_
__H______*__H_*H_H_
__HH_HHHHH_HHH_H_H_
___H*____H_____H_H_
___H__HH_HH_HHHH_H_
_HHH*_H_*_*__H.H_H_
_H____H_H__H_H.H_H_
HH_H__H______H.H_HH
H_*HHHHHHHHHHH.H__H
H____________H___.H
H__HHHHHHHHH___HH.H
HHHH_______HHHHHHHH


输入两行中各一段
#_#*__#_#
#__*_*__#
可以找到sven 1307,
和grigr 100 不像
-####-------
-#--#####---
##*-*---##--
#-$-#--*-##-
#---##*--.#-
###-#--*#-#-
-#------#-#-
-#--#-###-##
-#---*@##--#
-###--*-*--#
---##---#--#
----########



_HHHH_______
_H__HHHHH___
HH*_*___HH__
H_$_H__*_HH_
H___HH*__.H_
HHH_H__*H_H_
_H______H_H_
_H__H_HHH_HH
_H___*aHH__H
_HHH__*_*__H
___HH___H__H
____HHHHHHHH


原关不知道是什么,老封当时收集的里面有没有?
我没找到相同关。

[ 本帖最后由 jinyou 于 2009-7-28 17:19 编辑 ]

anian 发表于 2009-7-29 00:39:40

我想原关应该是 sven 1307。

经过考虑, 在SokoFind增加了“add wall to pattern”(自动加外墙) 的选择。
如果在局部关卡里面没有空行,那就可以选“add wall to pattern”和不用在局部关卡加外墙。

因为大多数做查找的时候, 局部关卡里面是没有空行。 所以“add wall to pattern”的选择默认是‘选’。
方便大家用的时候不用加外墙。

请到这里下载: http://sokoutil.orgfree.com/

还有, 经过几番测验, 觉得在查找关卡的时候最好还是不做规格化。
因为这个原因, 就没有增加之前说过的“关卡已经规格化”的选择。
除非每一个关卡都有很多多余的墙(或装饰的东西), 不做规格化比做规格化快很多。
当然, 如果用家先将关卡进行规格化然后再储存, 那在用SokoFind的时候理论上是可以減少搜查的時間。

如果金优兄已经有一个友善界面的程序来做规格化, 相信大家会想试试。

[ 本帖最后由 anian 于 2009-7-29 02:45 编辑 ]

jinyou 发表于 2009-7-29 09:37:57

我想“友善界面的程序来做规格化”,这样的东西我不想做,因为推箱子文件的格式是会不断增加的,如MF8格式。一个程序要是用来读各种格式关卡就要不断更新,很麻烦的。其实我就是编了个读老封BOX文件的东西,存到DBF文件里。
确实是这样,从现有图案查找匹配题目。和在大量题目里把所有相似题目归类,是两个很不一样的问题。
现在我在想怎么让计算机从现有图案中提取关键字段,无非就是选择内容丰富的地方。就是有墙,有箱子,有目标点,有空地的一段。

anian 发表于 2009-7-29 11:28:58

> 确实是这样,从现有图案查找匹配题目。和在大量题目里把所有相似题目归类,是两个很不一样的问题。

其实已经有个程序可以在大量题目里把所有相似题目归类, 那就是YSokoban作者
George的作品SokoDup。

SokoDup能在大量的关卡里找出相同的关卡。也可以找出相似的关卡。
在这里, “相似的关卡”其实也是关卡一样, 不过“人”的位置可以不同。

SokoYASC里面也有一个“Find Duplicates”的功能, 和SokoDup的功能相近。
个人觉得SokoDup好一点。  但如果喜欢友善的界面, 那就会选择SokoYASC。

jinyou 发表于 2009-7-29 12:36:19

threshold serach 做什么用的
页: 1 [2] 3 4
查看完整版本: 介绍 SokoFind 【2014年更新:v2.0.2中文版发布】