标题: 编制三三计算机辅助推理程序,一泓清泉请进。
疑似没有刀
高级会员
Rank: 4



UID 13690
精华 6
积分 2065
帖子 124
威望 541
论坛金钱 1463
游戏积分 3099
等级 6
阅读权限 50
注册 2007-8-21
状态 离线
发表于 2008-3-17 13:30  资料  个人空间  短消息  加为好友 
编制三三计算机辅助推理程序,一泓清泉请进。

刚才看了一泓清泉的一篇三三逻辑推理的文章,有个想法----可以编制一个三三的计算机程序进行自动化推理。

                                 
                     三三推理程序的数据结构

三三的信息主要是一些集合数据,如果有一个计算机推理程序,三三的输入信息应该是如下三类,都可以量化:

一,角色每轮次的状态信息。
    角色在每一轮次有三种基本状态:
    1),未明,
    2),明警,
    3),明匪。

二,角色的每轮发言信息。

角色每一轮次的被指认集合,也有三种基本状态:
    A,被指认为警察的其他角色集合。
    B,被指认为匪徒的其他角色集合。
    C,被指认为民的其他角色的集合。
(注,该轮角色没有被指认的状态,其实是 A,B,C空集的并集)


角色在每轮指认他人角色的集合,也有三种基本状态:
    a,指认其他角色为匪徒的集合。
    b,指认其他角色为警察的集合。
    c,指认其他角色为平民的集合。
(注:所谓改角色本轮积身份,集合的表示是a,b,c空集的并集)


三,每轮投票信息。

    每轮投票信息本身就已经量化,只考虑指认集合就可以了。
    因为投票的指认与被指认关系,是一一对应的。

    如果作为输入程序,应该人工判断剔除两种极端情况:
    1.)当警匪裸奔投票的情况。 (结果直接明了了,不必要计算机程序去辅助推理)
    2.)当明警确立归票的情况。 (除了考虑明警的遗言票,本轮次投票信息,没有必要作为参考数据。)


                          三三推理程序的算法

三三的推理算法,首先要考虑设立权重值。

1),要考虑把每轮次的角色状态作为权重值,比如可以设定:
     角色未明 =  -1
          角色明警 =  1.0 到 2.0
          角色明非 =  1.0 到 2.0  

         因为明警明匪都说真话假话的程度不同,每轮次的重要性也不同,所以这个权重值应该在人工输入的时候,设成可调的。比如,明确死警的权重可以设为最大,2.0。

2.),轮次循环匹配算法 (注:这个算法来自一泓清泉的原创文章。)
这个算法应该是可以在计算机上编程实现的。

首先,要得出每轮次的怀疑对象集合。

当每一轮次人工输入角色的角色,发言指认,投票和权重信息后:
   程序,对发言投票信息进行一次匹配。
   找出本轮次发言指认,投票不匹配的角色集合作为怀疑对象集合 I 。

   程序同时,将本轮次的角色状态值最为权重值,与发言信息中的指认和被指认集合分别相互乘。每个角色的指认集和被指认集分在加权后分别进行匹配运算,得到怀疑对象集合
II。(注:这里说的匹配算法不是简单的判断是不是相等,细节要再考虑。)

   集合 I 和 集合 II 的并集,再考虑加权,可以得出本轮的怀疑对象集合。
   由于有加权算法,所以在这轮集合可以区分怀疑角色的程度。


其次,程序要考虑轮次的累积效应,进行循环比对,这是“一泓清泉的”原创文章里的主要思想,现在每轮的怀疑对象集合可以由程序生成了,每轮的角色状态信息也包含了,每轮的结果信息。

   那么该怎么考虑轮次之间的结果和怀疑对象集合的循环匹配算法呢?

   大家能看的懂的,能发表一下意见吧。


本帖最近评分记录
乖虫子   2008-3-31 18:49  威望  +8   
顶部
一泓清泉
中级会员
Rank: 3Rank: 3



UID 90225
精华 3
积分 596
帖子 123
威望 237
论坛金钱 517
游戏积分 64074
等级 18
阅读权限 30
注册 2008-2-7
状态 离线
发表于 2008-3-17 17:11  资料  个人空间  短消息  加为好友 
你太强了!

暂时还没有时间看完,而且我的那个逻辑分析也没有写完,

不过你的这个创意很好,如果有这个辅助程序,,那我玩游戏时可以轻松许多,而且可以不断推演,,,如果编出了,一定给我试一下

意见这二天再给,先顶一下.

顶部
疑似没有刀
高级会员
Rank: 4



UID 13690
精华 6
积分 2065
帖子 124
威望 541
论坛金钱 1463
游戏积分 3099
等级 6
阅读权限 50
注册 2007-8-21
状态 离线
发表于 2008-3-17 17:46  资料  个人空间  短消息  加为好友 
清泉,我们干系统分析员干的活吧。

清泉,这个程序偶是不想写的,懒得化这个精力去实现它。

但是这么个玩法,却是很有乐趣。

我们就只是把系统分析员干的活干了。

定义好数据结构,然后一起完善算法。

三三网站的程序员,有兴趣的话就去实现吧 ! 系统升级了。

不过,这是会一个三三的黑客程序,会破坏三三和谐的。 管理层考虑清楚先,再去实现。

顶部
zaki
中级会员
Rank: 3Rank: 3


UID 20198
精华 0
积分 1238
帖子 167
威望 22
论坛金钱 677
游戏积分 4355
等级 7
阅读权限 30
注册 2007-9-7
状态 离线
发表于 2008-3-18 21:14  资料  个人空间  短消息  加为好友 
我觉得很奇怪~~~首先是权重的问题~这个标准由谁设定~为什么角色未明 =  -1...角色明警 =  1.0 到 2.0.... 角色明非 =  1.0 到 2.0 .....而不是3.0到4.0~~~而且明匪的话本身就是要搞局~~只有明警的话才能相信~~~~其次是关于那个投票的问题~您说因为投票的指认与被指认关系,是一一对应的~~如果刚刚相反~如果有人投票的时候与自己发言时的立场不一致~那怎么办~~~~

最后希望能提供一下伪代码~这样比较容易理清关系~~因为我觉得LZ的话还是有参考价值的~

顶部
疑似没有刀
高级会员
Rank: 4



UID 13690
精华 6
积分 2065
帖子 124
威望 541
论坛金钱 1463
游戏积分 3099
等级 6
阅读权限 50
注册 2007-8-21
状态 离线
发表于 2008-3-18 21:38  资料  个人空间  短消息  加为好友 
该程序只是作为“辅助推理”,不可能干全自动的活。

1.)权重值设定为1.0,2.0......只是举个例子。
       权重的设定是必需的,这个信息是要由人工判断输入。

2.) 这个程序要解决的问题之一是信息的输入。
   原文已经说明了,有每一轮次都要输入三类信息:
   角色的状态信息,
   发言信息(包括角色指认和被指认的集合,两个集合之间是多对多的关系)
   每轮结束的投票信息。

   这三类信息里面包含了真实的情况,譬如每轮角色的状态信息中有的是可以明确定为匪或者确定为警察的,但是这种真实性只可能由人工判断(甚至可能人工判断不准),这就需要设定权重值来区别,对这种“真实性”认定的程度。

3.)关于投票信息。
    由于每个角色在轮次结束后只能唯一投一票,或者不投票。所以角色的指认和被指认集合之间,当然是一对一的关系。

顶部
疑似没有刀
高级会员
Rank: 4



UID 13690
精华 6
积分 2065
帖子 124
威望 541
论坛金钱 1463
游戏积分 3099
等级 6
阅读权限 50
注册 2007-8-21
状态 离线
发表于 2008-3-18 21:44  资料  个人空间  短消息  加为好友 
"如果有人投票的时候与自己发言时的立场不一致"怎么办?


这其实正是一种可疑情况,有关这个程序的推理算法还在讨论中。

偶认为,首先应该结合角色的状态信息,对每轮次的角色投票情况和发言情况进行比对。
从而找到初步的被怀疑角色。

经过这个步骤得到的还只是比较粗糙的一个中间结果,还需要进一步计算。

顶部
zaki
中级会员
Rank: 3Rank: 3


UID 20198
精华 0
积分 1238
帖子 167
威望 22
论坛金钱 677
游戏积分 4355
等级 7
阅读权限 30
注册 2007-9-7
状态 离线
发表于 2008-3-18 23:36  资料  个人空间  短消息  加为好友 
我认为~~权重的问题~~这个权重系数应该是一个变量~而不是一个常量~~对于这方面~应该也要编写一个合理的函数来计算~~

顶部
疑似没有刀
高级会员
Rank: 4



UID 13690
精华 6
积分 2065
帖子 124
威望 541
论坛金钱 1463
游戏积分 3099
等级 6
阅读权限 50
注册 2007-8-21
状态 离线
发表于 2008-3-19 08:29  资料  个人空间  短消息  加为好友 
权重系数的确是设成变量。

谢谢 Zaki。

一开始,我就考虑把权重系数设成可调的。

举的例子是:
               未明身份 =  -1                           (未明身份应该是等值的)
                              角色明警 =  1.0 到 2.0            
                           (角色判定为警察时,明确度可以从1.0,1.1 .......到 2.0,极端情况是2.0)
                              角色明非 =  1.0 到 2.0  
                           (角色判定为匪徒时,明确度可以从1.0,1.1 .......到 2.0,极端情况是2.0)

顶部
疑似没有刀
高级会员
Rank: 4



UID 13690
精华 6
积分 2065
帖子 124
威望 541
论坛金钱 1463
游戏积分 3099
等级 6
阅读权限 50
注册 2007-8-21
状态 离线
发表于 2008-3-19 08:43  资料  个人空间  短消息  加为好友 
回答Zaki,关于伪代码的问题。

目前阶段,还不是考虑程序实现和给出伪代码的而时候。
因为,数据结构和算法还没有完全讨论清楚。

初步的考虑,用 C 或者 C++, C# 都是好的实现工具。

考虑用C++类的方式来实现更有乐趣一些,

设定警察,杀手和平民的角色状态类,每个类中的一个Bool成员数据,TRUE值表示确认这种状态,FAUL值表示否认。

设定一个角色类,角色类中包含所有三种状角色态类作为成员变量。

顶部
zaki
中级会员
Rank: 3Rank: 3


UID 20198
精华 0
积分 1238
帖子 167
威望 22
论坛金钱 677
游戏积分 4355
等级 7
阅读权限 30
注册 2007-9-7
状态 离线
发表于 2008-3-20 10:44  资料  个人空间  短消息  加为好友 
对,我也觉得用C++比较方便,至于关于那个伪代码,是因为我还没有完全理解透LZ的方法~~所以想要伪代码来看看…不过,初步考虑,我们可以先从最简单的模式做起,包括我之前提出的发言与投票立场不一致这些问题就暂且不要考虑。
…对于这个程序,我觉得很有趣~~希望能和LZ合作弄一个出来~哈哈~
如果是C++的话,建议用C++ Builder,07年出了新版本,很多旧版本的问题得到了很好地解决,它现在比VC和.NET好多了~~

顶部
 



当前时区 GMT+8, 现在时间是 2008-12-3 13:07
浙ICP备07019873号

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0
清除 Cookies - 联系我们 - www.3J3F.com - Archiver