第一篇:人工智能 井字棋的实现
人工智能 井字棋的实现
学院:信息工程学院 教师:罗会兰 专业:计算机应用技术
学号:6120160166 姓名:王硕豪
简介
2016年3月9日,李世石与 AlphaGo 的人机大战开始。这将成为写入人类史册的一天。计算机 AI 可以在围棋上战胜人类顶尖棋手的时代已经到来。两个月之后,美国白宫就推动成立了机器学习与人工智能分委会,由其主持和协调撰写了三个关于人工智能发展的报告:《为人工智能的未来做好准备》《国家人工智能研究和发展战略计划》和《人工智能、自动化与经济报告》。欧盟、英国和日本等也相继发布了研发和应用人工智能的报告。显然,中国应当参与到这种战略布局当中,这种布局不仅是国家和民族的需要,而且也是赢得未来的利器。
再厉害的程序员,也是从“hello world”程序开始写起。再“聪明”的机器,也是从零样本开始“训练”出来的。所以今天就来写一个最简单棋类游戏:
Tic Tac Toe,又叫井字棋,大陆、台湾又称为井字游戏、圈圈叉叉;另外也有打井游戏、OX棋的称呼,香港多称井字过三关、过三关,是种纸笔游戏。大致说下井字棋的规则:
1.棋盘为 3*3 共 9 格,类似汉字“井”; 2.一方为 o,一方为 x,轮流落子;
3.任一方先有连成一条线的 3 个棋子(横、竖、斜皆可)则为胜利; 4.棋盘摆满仍没有一方胜利,则为平局。
这种游戏实际上是由第一位玩家所控制,第一位玩家是攻,第二位玩家是守。第一位玩家在角位行第一子的话赢面最大(见图一),第二位玩家若是在边,角位下子,第一位玩家就可以以两粒连线牵制着第二位玩家,然后制造“两头蛇”。
图一
运行
开始的时候,会让你输入你的名字,我则输入我名字的缩写wsh;
接下来,由我们来选择是先下还是后下,1是先下,2是后下;
我们的符号是X,电脑的是O,由于我们选择了先下,我们在3*3的棋盘上先下在第2行第2列;
电脑则下在了第1行第1列,再次由我们决定,如果我们下在了已经有棋子的位置上则会提示你已经下过了;
我们决定下在第1行第3列,电脑则下在第3行第1列,我们需要注意到如果电脑再下到第2行第1列就获得胜利,所以我们需要防守
我们为了防守下在了第2行第1列,电脑又下在了第2行第3列,这时候其实我们可以注意到如果想要胜利只有将第2列连成直线一种方法了;
我们下在了第1行第2列,电脑下在了第3行第2列,这时候已经可以看出是个平局了;
我们把最后一个位置填上,电脑告诉我们这是一个平局,是否还想要再玩;
输入y,电脑让我们再次选择先后手,大家就可以根据自己的想法来试着战胜电脑了。
如果失败了,也会询问你是否再次挑战,如果输入n则会直接跳出;
代码实现
棋盘本身的数据,用int a[3][3]来表示,棋盘中0表示空,1表示我们下的,其余的则是电脑下的;
void print(){ int i,j;cout<<“n”;for(i=0;i<3;i++){ for(j=0;j<3;j++){ if(a[i][j]==0)cout<<“.t”;elseif(a[i][j]==1)cout<<“Xt”;else
cout<<“Ot”;} cout< 检查是否有人获胜,分别是三行,三列,对角线的8种情况 int check(){ for(int i=0;i<3;i++)if((a[i][0]!=0&&a[i][0]==a[i][1]&&a[i][1]==a[i][2])||(a[0][i]!=0&&a[0][i]==a[1][i]&&a[1][i]==a[2][i]))return 1; if(a[0][0]!=0&&a[0][0]==a[1][1]&&a[1][1]==a[2][2])return 1;elseif(a[0][2]!=0&&a[0][2]==a[1][1]&&a[1][1]==a[2][0])return 1;else return 0;} 我们下棋的时候,下第几行第几列,如果输入大于2或者小于0提示输入正确的数字,如果下的位置已经被下过了提示这里已经被下过了; void pin(){ int r=0,c=0;cout<<“Enter row: ”;cin>>r;cout<<“Enter column: ”;cin>>c;r--;c--;if(r>2||c>2||r<0||c<0){ strcpy(str,“Enter correct value ”);strcat(str,name);strcat(str,“.n”);puts(str);pin();} elseif(a[r][c]!=0){ cout<<“It is already filled.n”;pin();} else a[r][c]=t;} 电脑的防守策略,即我们选择先手时电脑的应对策略 int defend(int c, int p, int b){ if(b<3)return 0;elseif(a[0][0]+a[1][1]+a[2][2]==2*c&&a[0][0]!=p&&a[1][1]!=p&&a[2][2]!=p){ for(int i=0;i<3;i++){ if(a[i][i]==0){ a[i][i]=y;cout<<“Computer turn: ”< 电脑的进攻策略,即我们选择后手时电脑的落子策略 int attack()//takes a move as to win in future.{ int i,j;if(a[0][0]+a[0][2]+a[2][0]+a[2][2]==t||a[0][0]+a[0][2]+a[2][0]+a[2][2]==2*t){ for(i=0;i<3;i++){ if(a[i][0]+a[i][1]+a[i][2]==y &&(a[i][0]==y||a[i][1]==y||a[i][2]==y)){ if(i==1){ for(j=0;j<3;j++){ if(a[i][j]==0){ a[i][j]=y;cout<<”Computer turn: “< { for(j=2;j>=0;j--){ if(a[i][j]==0){ a[i][j]=y;cout<<”Computer turn: “< { for(j=2;j>=0;j--){ if(a[j][i]==0){ a[j][i]=y;cout<<”Computer turn: “< } } for(i=2;i>=0;i--){ if(a[i][2-i]==0){ if((a[i][0]+a[i][1]+a[i][2]==t&&(a[i][0]==t||a[i][1]==t||a[i][2]==t))&&(a[0][2-i]+a[1][2-i]+a[2][2-i]==t&&(a[0][2-i]==t||a[1][2-i]==t||a[2][2-i]==t))){ a[i][2-i]=y;cout<<”Computer turn: “<=0;i--){ if(a[i][2-i]==0){ a[i][2-i]=y;cout<<”Computer turn: “<=0;i--){ if((a[i][i]==0)&&((a[i][0]+a[i][1]+a[i][2]==y&&(a[i][0]==y||a[i][1]==y||a[i][2]==y))||((a[0][i]+a[1][i]+a[2][i]==y)&&(a[0][i]==y||a[1][i]==y||a[2][i]==y)))){ a[i][i]=y;cout<<”Computer turn: “<=0;i--){ if(a[i][i]==0){ if((a[i][0]+a[i][1]+a[i][2]==t&&(a[i][0]==t||a[i][1]==t||a[i][2]==t))&&(a[0][i]+a[1][i]+a[2][i]==t&&(a[0][i]==t||a[1][i]==t||a[2][i]==t))){ a[i][i]=y;cout<<”Computer turn: “<=0;i--){ if(a[i][i]==0){ a[i][i]=y;cout<<”Computer turn: “< elseif(a[0][2]+a[1][1]+a[2][0]==y &&(a[0][2]==y||a[1][1]==y||a[2][0]==y)){ for(i=2;i>=0;i--){ if(a[i][2-i]==0&&((a[i][0]+a[i][1]+a[i][2]==y&&(a[i][0]==y||a[i][1]==y||a[i][2]==y))||((a[0][2-i]+a[1][2-i]+a[2][2-i]==y)&&(a[0][2-i]==y||a[1][2-i]==y||a[2][2-i]==y)))){ a[i][2-i]=y;cout<<”Computer turn: “<=0;i--){ if(a[i][2-i]==0){ if((a[i][0]+a[i][1]+a[i][2]==t&&(a[i][0]==t||a[i][1]==t||a[i][2]==t))&&(a[0][2-i]+a[1][2-i]+a[2][2-i]==t&&(a[0][2-i]==t||a[1][2-i]==t||a[2][2-i]==t))){ a[i][2-i]=y;cout<<”Computer turn: “< for(i=2;i>=0;i--){ if(a[i][2-i]==0){ a[i][2-i]=y;cout<<”Computer turn: “<=0;j--){ if(a[i][j]==0){ a[i][j]=y;cout<<”Computer turn: “< { for(j=2;j>=0;j--){ if(a[j][i]==0){ a[j][i]=y;cout<<”Computer turn: “< void ai(int b){ if(!defend(y,t,b)){ if(!defend(t,y,b)){ if((a[0][0]+a[0][2]+a[2][0]+a[2][2]==t+y||a[0][0]+a[0][2]+a[2][0]+a[2][2]==t+2*y)&&a[1][1]==0){ for(int i=0;i<3;i+=2){ for(int j=0;j<3;j+=2)if(a[i][j]==0){ a[i][j]=y;cout<<”Computer turn: “< } elseif(b==2&&a[1][1]==0){ a[1][1]=y;cout<<”Computer turn: 2 2n“;goto end;} if(!attack()){ if(b==0){ time_t seconds;time(&seconds);srand((int i,j;a[(rand()%2)*2][(rand()%2)*2]=y;for(i=0;i<3;i+=2){ for(j=0;j<3;j+=2)if(a[i][j]==y)cout<< } } elseif(a[1][1]==0){ a[1][1]=y;cout<< } else { int i,j;for(i=0;i<3;i++){ for(j=0;j<3;j++){ if(a[i][j]==0){ a[i][j]=y;cout< unsignedint)seconds);”Computer turn: “< 目录 一、设计课题名„„„„„„„„„„„„„„„„„ 1 二、设计目的„„„„„„„„„„„„„„„„„„ 1 三、问题描述及需求分析………………………………… 1 四、概要设计„„„„„„„„„„„„„„„„„„ 五、详细设计„„„„„„„„„„„„„„„„„„ 六、测试数据及测试结果………………………………… 七、课程设计小结„„„„„„„„„„„„„„„„ 八、用户手册……………………………………………… 1 5 7 8 一、设计课题名 井字棋(人机对弈) 二、设计目的 1、课程设计是《数据结构》课程教学必不可缺的一个重要环节; 2、通过课程设计加深课堂教学内容的理解和巩固; 3、将《数据结构》课程的教学内容与解决实际问题结合起来,培养理论联系实际的学风; 4、提高程序设计能力、培养自学能力 ; 5、提高分析问题、解决问题的能力; 6、提高收集资料、查找参考书的能力; 7、锻炼书写报告的能力。 三、问题描述及需求分析 本设计的主要完成的是井字棋的人机对弈问题,即计算机与人交替落子,当行、列或对角有连续三个相同一方棋时,则判定一方胜利,若无此情形则为和局。 要完成此设计则需一判定胜负函数及一计算机自行落子函数,一旦这两个函数完成则此程序主要部分可完成。 四、概要设计 完成此程序需一合理数据结构,因其为井字棋游戏程序则此结构中应包含一存储当前棋局的数组;又因计算机在判定在何位置落子最佳时,需一搜索树因而我在设计时设置了一PARENT域和CHILD域; 除了主程序外,它还包括具有以下功能的函数:(1)棋盘初始化函数:void Init();(2)打印棋盘函数:void PrintQP(); (3)用户输入落子位置函数:void UserInput(); (4)判断当前棋局是否有一方获胜,并判断哪一方获胜的函数:int IsWin(State s);(5)评估函数值计算函数:int e_fun(State s);(6)极大极小值算法主函数:int AutoDone()。 五、详细设计 设计步骤: (1)选定算法; (2)建立一个简单的应用程序(如字符界面程序)来测试算法; (3)选定要实现的其他功能(如双人对弈、悔棋、难易级别选定、联机对战等); 第1页 共8页(4)实现井字棋程序。 数据结构设计: struct State 该结构表示棋盘的某个状态,也可看做搜索树中的一个节点 { int QP[3][3]; 棋盘格局 int e_fun; 当前状态的评估函数值 int child[9]; 儿女节点的下标 int parent; 双亲节点的下标 int bestChild; 最优节点(评估函数值最大或最小)的儿女节点下标 } States[MAX_NUM];用来保存搜索树中状态节点的数组 我使用了States[MAX_NUM]数组来保存生成的状态节点,通过State结构中的parent、child域构成了一个搜索树,并通过bestChild域保存了一条从根节点到叶节点的最优解路径。特别的,States[0]作为根节点保存了当前的棋局状态。为了保存当前对弈过程的状态信息,我定义了以下常量: const int MAX_NUM=1000; 扩展生成状态节点的最大数目 const int NO_BLANK=-1001;表示没有空格 const int TREE_DEPTH=3; 搜索树的最大深度 const int NIL=1001;表示空 算法设计及算法分析: 本程序采用的核心算法是极大极小值算法,这种算法的思想是“考虑双方对弈若干步之后,从可能的走法中选一步相对较好的走法来走”,并且“在有限的搜索深度范围内进行求解”。整个算法在AutoDone函数中实现,其实现过程分为以下几步: (1)为了获得最优的落子位置,在算法中首先要生成搜索树。其中,我把States[0]作为树根节点,根节点所在的层是极大层(MAX层),然后通过向棋盘中没有落子的空格添一个对方的棋子生成下一层(极小层,MIN层)的树节点,如果当前树的高度大于等于TREE_DEPTH(>=1)全局变量,则停止生成节点,否则则继续生成下一层节点(如果当前节点层为MIN层,则下一层为MAX层,否则,则下一层为MIN层)。生成每一层时可为每一层的属性(MAX或MIN)做标记,生成每个节点时,应计算这个节点的评估函数值,并将其保存在状态节点的e_fun域中。 (2)因为层次遍历会修改非叶节点的极大极小值,而且非叶节点原来的极大极小值会对其来自其子女节点的极大极小值产生影响(比如,如果一个非叶节点的极大极小值大于或小于其子女节点中的最大者或小于其中的最小者,则导致其评估函数值无法更新)。所以非叶节点没有必要也不能保存。这一步的源代码如下所示: tag=States[s_count].parent;//设置最底层标志,以区分叶节点和非叶节点。 第2页 共8页 for(i=0;i<=s_count;i++){ if(i>tag)//保留叶节点的评估函数值 { States[i].e_fun=e_fun(States[i]); } else //抹去非叶节点的评估函数值 States[i].e_fun=NIL;}(3)然后,通过层次遍历获得每个非叶节点的评估函数值,同时将非叶节点的bestChild域指向最佳子女,从而形成一条从根节点到叶节点的最佳解路径。这一步的源代码如下所示: while(!IsOK)//寻找最佳落子的循环 { for(int i=s_count;i>tag;i--) { if(max_min)//取子女节点的最大值 { if(States[States[i].parent].e_fun { States[States[i].parent].e_fun=States[i].e_fun; //设置父母节点的最大最小值 States[States[i].parent].bestChild=i; //设置父母节点的最佳子女的下标 } } else//取子女节点的最小值 { if(States[States[i].parent].e_fun>States[i].e_fun||States[States[i].parent].e_fun==NIL) { States[States[i].parent].e_fun=States[i].e_fun; //设置父母节点的最大最小值 States[States[i].parent].bestChild=i; //设置父母节点的最佳子女的下标 } } } s_count=tag;//将遍历的节点上移一层 max_min=!max_min;//如果该层都是MAX节点,则它的上一层都是MIN节点,反之亦然。 if(States[s_count].parent!=NIL)//如果当前遍历的层中不包含根节点,//则tag标志设为上一层的最后一个节点的下标 第3页 共8页 tag=States[s_count].parent; else IsOK=true; //否则结束搜索 }(4)最后,将当前的棋局更新为其最优子女节点的棋局,并获得落子的位置。这一步的源代码如下所示: //取落子的位置,将x,y坐标保存在变量pos_x和pos_y中,//并将根(当前)节点中的棋局设为最佳子女节点的棋局 for(int x=0;x<3;x++){ for(int y=0;y<3;y++) { if(States[States[0].bestChild].QP[x][y]!=States[0].QP[x][y]) { pos_x=x;pos_y=y; } States[0].QP[x][y]=States[States[0].bestChild].QP[x][y]; } } 在我采用的算法中,可以通过增加生成树的层数,即增加TREE_DEPTH的值来提高计算机的智商。这相当于增加了计算机向前预测的步数。对井字棋来说,因为井字棋有9个格,所以TREE_DEPTH的最大值可以设为9。TREE_DEPTH=3时,计算机会综合考虑以后3步的走法。当TREE_DEPTH=3时,程序生成的最大状态节点数为:1+9+9×8+9×8×7=585个。 总结: 在本程序中的井字棋程序使用了极大极小值算法,这种算法的思想是“考虑双方对弈若干步之后,从可能的走法中选一步相对较好的走法来走”,并且“在有限的搜索深度范围内进行求解”。 最大最小值算法的核心是将搜索树的层分为MAX层和MIN层,MAX层和MIN层交替相邻(即,一个节点如果在MAX层,则其子女节点在MIN层;如果在MIN层,则其子女节点在MAX层),在MAX层的节点的评估函数值取其子女节点中的最大者,在MIN层的节点的评估函数值取其子女节点中的最小者。 此外,需要定义一个评估函数来计算叶节点的评估函数值,要注意将某方获胜的状态节点的评估函数值设为计算机能表示的最大数(无穷大)或最小数(无穷小)以表明在该状态下有一方获胜。 最后,还要“在有限的搜索深度范围内进行求解”,如果搜索深度太大,则在状态数较多的情况下会使时间耗费或空间耗费达到无法忍受的程度。 第4页 共8页 六、测试数据及测试结果 图一:程序初始运行界面 图二:人机对弈初始界面 第5页 共8页 图三:人机对弈一方胜利界面 图四:双人对弈界面 第6页 共8页 图五:双人对弈一方胜利界面 七、课程设计小结 心得体会: 通过本次《数据结构》课程设计,从看到设计要求,到选择课题再到自己构思,设计数据结构,构造算法,编写源代码,再到一个星期的上机调试,我充分认识到书本上的知识只是数据结构的基础知识,认识到将知识有机融合并运用到实际生活中的重要性。 本次课程设计的主要数据结构涉及到树的存储结构,我选择了用数组来存储相关内容,设计了一个parent域和child域。通过本次的课程设计、上机实验,原本对于树的存储结构相对比较生疏的我,现在能较为熟练的掌握树的各种存储结构,并能比较纯熟的选择适合的存储结构。在此次程序调试运行过程中我认识到一个可操作的好的程序必须有个良好的界面,因为只有这样才能实现与用户的互动,便于用户使用,才能充分发挥出一个好程序应有的功效。而一个好的编程工作者,应当在编程之前充分了解用户的需求,使用户能方便使用此程序的各项功能。 当然由于时间比较仓促、所学比较有限,对于此课程设计的模块尚不完全,因此功能还需完善,有较多地方有待改进,希望通过将来的进一步学习,我能完善此程序,将其功能设计的更加完全,能让用户更方便的使用。 存在问题: (1)在游戏进行过程中不能退出游戏界面; (2)双人对弈时不能清楚鉴别两人身份,落子时可能出现错误,且在游戏进行中不可提前判断平局情况; 第7页 共8页(3)不可进行悔棋,人机对弈难度的选择。 改进措施: 双人对弈时可设一姓名判别函数,确定双人身份; 设定判定树提前预测平局情况; 可对树的深度进行设置,借以改变对弈难度; 设一数组保存前一阶段棋局,在悔棋时可调出。 八、用户手册 按键说明: 1:进入人机对弈界面; 2:进入双人对弈界面; 3:退出。 具体说明: (1)进入具体对弈界面后会出现提示信息,按提示信息输入相关内容即可;(2)所输入的棋子的行列号为整数,其分别为11,12,13,21,22,23,31,32,33;其中前一位数为行号,后一位数为列号; (3)盘界面上0代表所在位置为空,若为0则代表此位置可落子;在人机对弈则1代表计算机所落之子,-1代表人所落之子;在双人对弈则1代表第二个人所落之子,-1代表第一人所落之子; (4)双人对弈时需先自行对下棋双方进行编号(1和2),而后根据提示输入谁为先手的信息,进而进入游戏。 注意: (1)进入游戏后不可中途退出游戏,需在决出胜负后按3方可退出;(2)在游戏进行期间若发现所输落子位置出错,可自行更改或按系统出错提示重新输入。 第8页 共8页 #include for(int i=0;i<=9&&ying==0;i++){ printf(“nn”); printf(“§0 1 2n”); printf(“0 %c %c %cn”,weizhi[0][0],weizhi[0][1],weizhi[0][2]); printf(“1 %c %c %cn”,weizhi[1][0],weizhi[1][1],weizhi[1][2]); printf(“2 %c %c %cn”,weizhi[2][0],weizhi[2][1],weizhi[2][2]); player=i%2+1; do { printf(“n 玩家%d:请输入您的棋子位置(%c)”,player,(player==1)? '1':'2');scanf(“%d%d”,&hang,&lie); if(weizhi[hang][lie]=='1'||weizhi[hang][lie]=='2')printf(“n对不起!这个位置已经有棋子了,请您再输入棋子的位置:n”); } : while(hang<0||hang>2||lie<0||lie>2||weizhi[hang][lie]=='1'||weizhi[hang][lie]=='2') ; weizhi[hang][lie]=(player==1)? '1':'2';count++; if(count==9)break; if((weizhi[0][0]==weizhi[1][1]&&weizhi[0][0]==weizhi[2][2]&&weizhi[2][2]!='-')|| (weizhi[0][2]==weizhi[1][1]&&weizhi[0][2]==weizhi[2][0]&&weizhi[2][0]!='-')|| (weizhi[0][0]==weizhi[1][0]&&weizhi[2][0]==weizhi[1][0]&&weizhi[1][0]!='-')|| (weizhi[0][1]==weizhi[1][1]&&weizhi[2][1]==weizhi[1][1]&&weizhi[1][1]!='-')|| (weizhi[0][2]==weizhi[1][2]&&weizhi[2][2]==weizhi[0][2]&&weizhi[0][2]!='-')|| (weizhi[0][0]==weizhi[0][1]&&weizhi[0][0]==weizhi[0][2]&&weizhi[0][2]!='-')|| (weizhi[1][0]==weizhi[1][1]&&weizhi[1][2]==weizhi[1][1]&&weizhi[1][1]!='-')|| (weizhi[2][0]==weizhi[2][1]&&weizhi[2][2]==weizhi[2][1]&&weizhi[2][1]!='-')) { ying=player; break; } else if(count==9)break; } printf(“nn”); printf(“%c %c %cn”,weizhi[0][0],weizhi[0][1],weizhi[0][2]); printf(“%c %c %cn”,weizhi[1][0],weizhi[1][1],weizhi[1][2]); printf(“%c %c %cn”,weizhi[2][0],weizhi[2][1],weizhi[2][2]); if(ying==0) printf(“n实力相当!此局平局!n”); else printf(“n恭喜玩家%d!了!nn”,ying); } 您赢补充: 井字镇妇联2009年工作总结 2009年,井字镇妇女、儿童工作以邓小平理论和“三个代表”重要思想和学习实践科学发展观为指导,认真贯彻落实省、市、县关于妇女工作会议精神,坚持真抓实干,一手抓发展,一手抓维权,大力宣传马克思主义妇女观和男女平等基本国策,切实维护妇女儿童合法权益,取得了一定成效,现简要总结如下: 一、健全反家庭暴力网络建设 由于长期的封建统治及男权思想的残余,我国妇女地位虽然有了显著提高,但家庭暴力在一定范围内,特别是农村仍然存在。为反对家庭暴力,维护妇女儿童合法权益,我镇建立了健全的反家庭暴力网络。我们在每一个村、每一个责任区及法庭、派出所、司法所、综治办、妇联均设立了反家庭暴力服务室,挂牌上班,挂牌率达100%,并明确专人负责,责任到人,这在一定程度上有效地遏制了家庭暴力事件的发生。今年共处理了10多起妇女维权事件,特别是莲塘村龙溪组朱映存一事,在县妇联的指导下,在司法部门的配合下得到了完满的解决。其次积极配合综治司法等部门抓好打黄扫非,禁赌禁毒工作,积极参与人大,政协组织的网吧专项整治活动,取得了明显成效。对群众来信来访,及时登记,及时答复,结案率在95%以上,让群众带着疑惑而来,带着满意而归。 二、提高妇女参政议政能力。 为进一步优化基层计生干部队伍,建立一支懂业务、会管理、能服务、善于做群众工作的年轻化、专业化的村级计划生育管理队 伍,有效推进井字计生工作,井字镇组织公开选聘村级计生专干。通过个人报名、理论考试、演讲答辩、组织审核等程序,36名具有中专(高中)以上学历,思想端正、作风正派、身体健康,年龄在35岁左右的女同志脱颖而出,被聘用为村级计生专干。继续协助组织部门做好女党员发展工作,去年共发展女党员5人,今年共发展女党员3人,培养女入党积极分子10人。二是积极培养、选拔优秀女干部,现在,我镇副科以上女干部有4人,女性中层骨干4人,占女干部总数1/3以上。 三、加强妇女儿童卫生保健。今年以来,我们积极加强妇女儿童卫生保健,督促中心卫生院做好村级卫生员及接生员的资格认定和培训及儿童防疫免疫工作,同时大力普及妇儿童保健知识。 四、提升女孩受教育程度。为使女孩受教育水平得到提高,我们在抓好适龄女童入学率、义务教育完成率之外,还着重开展了贫困女生助学行动,做到不让一个女生因贫失学。今年,在团县委组织的“助学行动”中,扶助失学儿童2名。 五、进行关爱女孩综合治理。通过电视讲话、张贴标语等多种形式大力宣传“男女平等”基本国策,在全社会营造尊重和保护妇女、关心和支持妇女学习、工作的良好氛围。加大对《妇女权益保障法》、《婚姻法》、《劳动保障法》等法律法规的宣传力度,提高妇女法律水平,强化妇女依法维权意识,加强妇女儿童维权网络建设,成立了由党委副书记牵头,公、检、法、司、妇联及工会等部门单位广泛参与的工作小组,工作人员各司其职,对严重侵害妇女儿童权益的犯罪案件做到发生一起,打击一起,及时为受害妇女伸张正 义,同时,借助于人大、政协及群团组织之力,净化未成年女孩成长环境。 六、配合计生部门严历打击“两非”。由于长期的封建统治及男权思想的残余,近年来,非医学需要选择胎儿性别鉴定及非法终止妊娠现象较为严重,导致男女性别比持续升高,给社会稳定造成隐患。为遏制这一势头的蔓延,我们根据县委、政府的精神,配合计生部门严历打击“两非”,力争使性别比保持在正常范围内。 七、开展丰富多彩的活动。一是抓好“三大主体”活动。根据县妇联的要求,我镇在干部职工和群众中,认真开展了“双学双比”活动、“五好文明家庭”创建活动和“巾帼建功”活动,取得了较好成效。二是开展“三节”活动,在“三.八”妇女节,我镇组织全体女干部召开了座谈会。在“六.一”儿童节,我镇妇联与学区联合举办了井字镇第四届少儿艺术节,全镇的小学生在镇中心小学欢乐、愉快地欢度自己的节日;在“七.一”建党节,我镇妇联与镇组织室等部门联合举办了别开生面的知识抢答赛,这些活动都得到了领导和群众的好评。 八、认真做好其他工作。为了认真宣传、推介井字镇妇女工作,今年镇妇联在《娄底日报》等市级刊物上刊稿多篇,同时已订出《今日女报》90多份。为了给领导决策提供依据,镇妇联积极配合党委政府参与松庄村水晶梨的开发,及时完成了县妇联和镇党委政府交办的各项工作。 2009年,我镇的妇女儿童工作虽然取得了一定成绩,但是还存在诸多不足,如妇女参政议政能力有待进一步加强,反家庭暴力 工作有待进一步深化,“重男轻女”思想还在一定程度上、一定范围内存在。我们一定以市、县妇女、儿童工作精神为指导,以提高全镇妇女生活质量为目的,以维护妇女儿童合法权益为重点,多方寻找差距,积极开拓进取,求真务实,大胆创新,开创新时期新形势下我镇妇女工作新局面。 2009年12月 井字梁设计的有关规定 1、井字梁与柱子采取“避”的方式,调整井字梁间距以避开柱位;避免在井字梁与柱子相连处井字梁的支 座配筋计算结果容易出现的超限情况;减少梁柱节点在荷载作用下,由于两者刚度相差悬殊而成为受力薄弱点以致首先破坏,由于井字梁避开了柱位,靠近柱位的区格板需另作加强处理。 2、"井字梁与柱子采取“抗”的方法,把与柱子相连的井字梁设计成大井字梁,其余小井字梁套在其中,形成大小井字梁相嵌的结构形式,使楼面荷载从小井字梁传递至大井字梁,再到柱子。 3、井字梁截面高度的取值以刚度控制为主,除考虑楼盖的短向跨度和计算荷载大小外,还应考虑其周边支 承梁抗扭刚度的影响。 4、由于井字梁楼盖的受力及变形性质与双向板相似,井字梁本身有受扭成分,故宜将梁距控制在3m以内。 5、井字梁一般可按简支端计算。 6、当井字梁周边有柱位时,可调整井字梁间距以避开柱位,靠近柱位的区格板需作加强处理,若无法避开,则可设计成大小井字梁相嵌的结构形式。 7、钢筋混凝土井字梁是从钢筋混凝土双向板演变而来的一种结构形式。双向板是受弯构件,当其跨度增加时,相应板厚也随之加大。但板的下部受拉区的混凝土一般都不考虑它起作用,受拉主要靠下部钢筋承担。因此,在双向板的跨度较大时,为了减轻板的自重,我们可以把板的下部受拉区的混凝土挖掉一部分,让受拉 钢筋适当集中在几条线上,使钢筋与混凝土更加经济、合理地共同工作。这样双向板就变成为在两个方向形成井字式的区格梁,这两个方向的梁通常是等高的,不分主次梁,一般称这种双向梁为井字梁(或网格梁)。 8、井字梁的支承井字梁楼盖四周可以是墙体支承,也可以是主梁支承。墙体支承的情况是符合计算图表的假定 条件:井字梁四边均为简支。当只有主梁支承时,主梁应有一定的刚度,以保证其绝对不变形。 9、井字梁楼盖两个方向的跨度如果不等,则一般需控制其长短跨度比不能过大。长跨跨度L1与短跨跨度L2之比 L1/L2最好是不大于1.5,如大于1.5小于等于2,宜在长向跨度中部设大梁,形成两个井字梁体系或采用斜向布置的井字梁,井字梁可按45°对角线斜向布置。 10、两个方向井字梁的间距可以相等,也可以不相等。如果不相等,则要求两个方向的梁间距之比a/b=1.0~2.0。实际设计中应尽量使a/b在1.0~1.5之间为宜,最好按井字梁计算图表中的比值来确定,应综合考虑建筑和结构受力的要求,一般取值在1 2~3m较为经济,但不宜超过3.5m。 11、两个方向井字梁的高度h应相等,可根据楼盖荷载的大小,取h=L2/20,但最小h不得小于短跨跨度1/30.12、梁宽=取梁高1/3(h较小时)1/4(h较大时),但梁宽不宜小于120mm。 13、井字梁的挠度f一般要求f≤1/250,要求较高时f≤1/400。 14、井字梁的楼板井字梁现浇楼板按双向板计算,不考虑井字梁的变形,即假定双向板支承在不动支座上。双 向板的最小板厚为80mm,且应大于等于板较小边长的1/40。 15、井字梁的配筋井字梁的配筋和一般梁的配筋基本上要求相同。但在设计中必须注意以下几点: a.在两个方向梁交点的格点处,短跨度方向梁下面的纵向受拉钢筋应放在长跨度方向梁下面的纵向受拉钢 筋的下面,这与双向板的配筋方向相同。 b.在两个方向梁交点的格点处不能看成是梁的一般支座,而是梁的弹性支座,梁只有在两端支承处的两个 支座。因此,两个方向的梁在布筋时,梁下面的纵向受拉钢筋不能在格点处断开,而应直通两端支座。钢筋不够长时,必须采用焊接,其焊接质量必须符合有关规范要求。C.由于两个方向的梁并非主、次梁 结构,所以两个方向的梁在格点处不必设附加横向钢筋。但是在格点处,两个方向的梁在其上部应配置适量的构造负钢筋,不宜少于2根Ф12,以防在荷载不均匀分布时可能产生的负弯矩,这种负钢筋一般 相当于其下部纵向受拉钢筋的1/3。 16、井字梁楼盖的混凝土强度等级不应低于C20。为了避免和减小楼盖混凝土的收缩裂缝,混凝土的强度等级不 宜太高。 17、井字梁和边梁的节点宜采用铰接节点,但边梁的刚度仍要足够大,并采取相应的构造措施。若采用刚接节点, 边梁需进行抗扭强度和刚度计算。边梁的截面高度大于或等于井字梁的截面高度,并最好大于井字梁高度的 20%~30%。 18、与柱连接的井字梁或边梁按框架梁考虑,必须满足抗震受力(抗弯、抗剪及抗扭)要求和有关构造要求。梁截 面尺寸不够时,梁高不变,可适当加大梁宽。 19、对于边梁截面高度的选取,应按单跨梁的规定执行,一般可取h=L/8~L/12(L为边梁跨度)。梁柱截面及 区格尺寸确定后可进行计算,根据计算情况,对截面再作适当调整。 20、在边梁内应按计算配置附加的抗扭纵筋和箍筋,以满足边梁的延性和裂缝宽度限制要求。 21、在节点两边, 边梁要增设附加吊筋或吊箍,将交叉梁的全部支座反力传到边梁的受压区;在楼面梁端部(一倍梁高的范围)需加密箍筋,且不少于Φ8@100。 22、井字梁最大扭矩的位置,一般情况下四角处梁端扭矩较大,其范围约为跨度的1/4~1/5。建议在此范围内适 当加强抗扭措施第二篇:数据结构课程设计报告(井字棋)
第三篇:c语言井字游戏
第四篇:井字镇妇联2008年工作总结
第五篇:井字梁设计的有关规定