人工智能的编程示例 爱因斯坦推理题
人工智能的编程示例爱因斯坦推理题
1.在一条街上,有5座房子,喷了5种颜色。
2.每个房里住着不同国籍的人。
3.每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物。
其中:
(1)、英国人住在红色的房子里;(2)、瑞典人养狗作为宠物;(3)、丹麦人喝茶;(4)、绿房子紧挨着白房子,在白房子的左边;(5)、绿房子的主人喝咖啡;(6)、抽PallMall牌香烟的人养鸟;(7)、黄色房子里的人抽Dunhill牌香烟;(8)、住在中间那个房子里的人喝牛奶;(9)、挪威人住在第一个房子里面;(10)、抽Blends牌香烟的人和养猫的人相邻;(11)、养马的人和抽Dunhill牌香烟的人相邻;(12)、抽BlueMaster牌香烟的人和啤酒;(13)、德国人抽Prince牌香烟;(14)、挪威人和住在蓝房子的人相邻;(15)、抽Blends牌香烟的人和喝矿泉水的人相邻。问题是:谁养鱼?
符号化表示如下:英国人 p1瑞典人 p2丹麦人 p3挪威人 p4德国人 p5
红房 h1绿房 h2白房 h3黄房 h4蓝房 h5
房子的位置从左到右为1,2,3,4,5
茶 d1咖啡 d2牛奶 d3啤酒 d4矿泉水 d5
PallMall y1Dunhill y2 Blends y3BlueMaster y4Prince y5
狗 a1鸟 a2猫 a3马 a4鱼 a5
十五句汉语的逻辑的表示式如下p1=h1p2=a1p3=d1w(h2)+1=w(h3)h2=d2y1=a2h4=y2w(h?)=3=d3w(h?)=1=p4|w(y3)-w(a3)|=1|w(y2)-w(a4)|=1y4=d4y5=p5|w(p4)-w(h5)|=1|w(y3)-w(d5)|=1
从如下的顺序开始推理w(p4)=1w(h5)=2
w(h2)=4w(h3)=5w(h1)=3w(h4)=1
人工推理的过程如下图所示:
推理结束时,25个对象各自对应一个从1到5的数字,人的类别,房子的类别,饮料的类别,烟的类别以及宠物的类别,本类别内的数字不能重复,这是题面上的硬约束。
以上图为编码根据,就可以程序化地实现推理了。数据结构是一个二维的数组。大小是25*5。每一次的推理都是根据约束条件,
划去不可能的数字。约束条件的表示,经过两次的转换,才能进入程序化的推理过程,例如英国人住红房子,这句话,计算机硬件无法直接处理。第一次转换为p1与h1关联。第二次再转换为0与5关联。翻译成计算机程序能懂的语言就是二维数组的第0项与第5项的内容完全一致。
根据上述的15个逻辑关系表达式以及人工推理的列表,编写了如下的Javascript程序,实现了数理逻辑上的人工推理到程序化推理的转化
functiontest(){varresult=0;result=initArray([25],function(a){returnrange([5]);});
result=set_value_by_group(result,12,3); //setd3=3;result=copy_constraint(result,[[10,2],[11,6],[13,18]]);
result=set_value_by_group(result,3,1); //setp4=1;result=copy_constraint(result,[[0,5],[1,20],[2,10],[4,19]]);
result=set_abs_contraint_by_group(result,[[3,9]]);//result=set_value_by_group(result,9,2); //seth5=2;result=copy_constraint(result,[[5,0],[6,11],[8,16]]);
result=set_value_by_group(result,7,5);result=copy_constraint(result,[[5,0],[6,11],[8,16]]);
result=set_value_by_group(result,6,4);result=copy_constraint(result,[[5,0],[6,11],[8,16]]);
result=set_abs_contraint_by_group(result,[[14,17],[16,23]]); result=copy_constraint(result,[[10,2],[11,6],[13,18],[0,5],[1,20], [2,10],[4,19],[5,0],[6,11],[8,16],[18,13],[20,1],[19,4],[16,8],[15,21],[21,15]]); result=check_unique(result); result=set_abs_contraint_by_group(result,[[14,17]]); result=copy_constraint(result,[[10,2],[11,6],[13,18],[0,5],[1,20], [2,10],[4,19],[5,0],[6,11],[8,16],[18,13],[20,1],[19,4],[16,8],[15,21],[21,15]]); result=set_abs_contraint_by_group(result,[[17,22]]); result=copy_constraint(result,[[10,2],[11,6],[13,18],[0,5],[1,20], [2,10],[4,19],[5,0],[6,11],[8,16],[18,13],[20,1],[19,4],[16,8],[15,21],[21,15]]); document.getElementById("txt3").innerText=list(result,function(a){returna;}); //list(arr,functionname)}
//set_add_by_range([1,2,5],1,[1,5]) ---->[2,3]functionset_add_by_range(set1,value,range_value_arr){varresult=[]; for(vari=0;ivarr1=set_add_by_range(x_arr,1,[1,5]);varr2=set_add_by_range(x_arr,-1,[1,5]);varr3=set_union(r1,r2);//varr4=[2,3,4,5];result=set_inter(r3,result,function(a,b){if(a==b)return1;elsereturn0;});returnresult;}
functionset_abs_contraint_by_group(result,arr){ for(vari=0;i result=set_value_by_group(result,arr[i][1],result[arr[i][1]][0]); } } returnresult;}
//d3=3set_value_by_group(result,12,3)functionset_value_by_group(result,index,value){ var index_bottom=index%5; var index_high=(index-index_bottom)/5; varindex_value=set_diff(range([5]),[index_bottom+1]); for(vari=0;i result=set_value_by_group(result,target_index,result[target_index][0]); } } result[index]=[value]; returnresult;}
functioncheck_unique(result){ for(vari=0;i var index_bottom=index%5; var index_high=(index-index_bottom)/5; varindex_value=set_diff(range([5]),[index_bottom+1]); var union_arr=[]; for(vari=0;i varvalue=set_diff(range([5]),union_arr); result[index]=value; } returnresult;}
//result=copy_constraint(result,[[10,2],[11,6],[14,18]])functioncopy_constraint(result,arr){ for(vari=0;i result=set_value_by_group(result,arr[i][1],result[arr[i][1]][0]); } } returnresult;}
少儿人工智能编程教育培训课程
人工智能编程,面向6-18岁青少年,依托上市教育集团20年编程教育经验,研发出一套系统的少儿编程学习体系,内容涵盖图形化智能编程(ScratchJr、Scratch)和Python人工智能编程(Python、JavaScript、HTML、CSS、Java)等,培养编程思维,提高中国孩子的综合能力和素质。课程流动课堂走进全国数百所中小学公立校,受到教育界和学生家长的高度认可。