用人工智能工具轻松解决爱因斯坦智力题

现有题号称爱因斯坦出的智力题全世界只有2%能够做出。

  1、在一条街上,有5座房子,喷了5种颜色。
  2、每个房里住着不同国籍的人
  3、每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物  问题是:谁养鱼?
  提示:
  1、英国人住红色房子
  2、瑞典人养狗
  3、丹麦人喝茶
  4、绿色房子在白色房子左面
  5、绿色房子主人喝咖啡
  6、抽Pall Mall 香烟的人养鸟
  7、黄色房子主人抽Dunhill 香烟
  8、住在中间房子的人喝牛奶
  9、 挪威人住第一间房
  10、抽Blends香烟的人住在养猫的人隔壁
  11、养马的人住抽Dunhill 香烟的人隔壁
  12、抽Blue Master的人喝啤酒
  13、德国人抽Prince香烟
  14、挪威人住蓝色房子隔壁
  15、抽Blends香烟的人有一个喝水的邻居

  为了便于消除翻译的误差,先将英文版本贴出(点击查看 附件)

  现在请你用c#写出解这个问题的程序!

  相信不少人对此题的第一个想法是通过暴力算法穷举所有可能让计算机进行求解。如果是这样那么你不用辛苦了,下面早就有人这么干过了:
  暴力算法解益智题[c#2.0版本](点击查看 附件)
  C#法解决世纪迷题(点击查看 附件)

  这些解法虽然都是对的,但是正如有人评论道:用笔解这题时候可比用程序看起来省力多了...算的上“轻松”吗?在这里向大家推荐人工智能工具NSolver (BY DR. Andy Chun, Hon Wai)。
  用NSolver如何解决问题?

  先举一个简单的例子:

  IQ 题:
  农场里有兔子和鸡若干只,知道共20个头和56条腿。问兔子和鸡各多少只?

  用c#来解这个问题,可能是:
using  System;
public   class  Rabbit
{
public   int  rabbit  =   0 ;
public   int  pheasant  =   0 ;
public   void  Run()
{
for  (rabbit  =   0 ; rabbit <= 20 ; rabbit ++ )
for  (pheasant  =   0 ; pheasant <= 20 ; pheasant ++ )
if  (rabbit + pheasant == 20
&&  rabbit * 4 + pheasant * 2 == 56 )
Console.WriteLine(
" Rabbit[ " + rabbit + " ] Pheasant[ " + pheasant + " ] " );
}
public   static   void  Main() {( new  Rabbit()).Run();}
}
有什么不足?

  1、没有变量/未知量的概念
  2、没有什么值合法什么不合法的概念(问题域)
  3、没有变量间的关系/约束概念
  4、所有都Hardcode了,不能扩展到更复杂的问题
  5、暴力破解穷举
  比较一下NSolver的解法:
using  ai.net.Solver;
using  System;
public   class  Rabbit : Solver
{
public  Var rabbits, pheasants;
public   void  Run()
{
rabbits 
=  var( 0 20 " Rabbits " );
pheasants 
=  var( 0 20 " Pheasants " );
Post(rabbits.Sum(pheasants).Eq(
20 ));
Post(rabbits.Prod(
4 ).Sum(pheasants.Prod( 2 )).Eq( 56 ));
Console.WriteLine(rabbits
+ "   " + pheasants);
}
public   static   void  Main() {( new  Rabbit()).Run();}
}
现在用NSolver解决爱因斯坦问题(点击查看 附件)  [如有乱码,请点击浏览器工具栏"查看"-"编码"-"简体中文"]

  看看这代码,简洁易懂! 现在你要做的就是陈述问题,NSolver帮你做剩下的!

  延伸阅读
   http://sc.info.gov.hk/gb/www.ugc.edu.hk/rgc/rgcnews9/Pages/6%20AI-C.html

  NSolver的好处就是,它不仅仅能解决这个爱因斯坦的问题,它所能解决的是属于一个叫做“Constraint Satisfaction Problems”的一大堆问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值