赞
踩
2.2.1 Visual Basic6.0基本概述和特点... 21
随着信息技术的飞速发展,各个行业的信息化正势在必行。科技的进步大大地提高了生产率。作为高校,如何才能提高办学效率,更好地完成教学任务,跟上社会发展步伐,这是一个摆在教学工作者面前的一个迫切的问题。应用信息化来改造传统的教学管理模式是一个重要途径。
近几年来,随着各高校办公自动化工作的推进,教务管理自动化也被摆上了日程。在教务工作中占有很大比重的一项就是每学期的课程表排定工作。由于教工、教室和设备的相对紧张,如何进行合理地安排和分配,从而充分利用教学资源是我们不得不面对的问题。而人工进行排课不仅任务重,效率低,而且易出错,难于维护,想要排出一张各方面都满意的课表非常困难。并且随着高校规模的扩大手工排课的难度和工作量呈几何级数增长。
高校通用排课系统正是为了减轻教务人员工作量,实现教务工作自动化,解决排课这一老大难问题的教务办公软件。
该系统是一个管理项目,旨在更好地管理高校的教学与资源整合,推动科技成果的推广转化,推进高校改革,提高高校的办学效率。在现有人力管理基础上,结合日渐成熟的当代计算机技术和各种辅助软件,对人力管理模式进行信息化改造,形成高效、便捷的计算机管理模式,是信息化改造传统产业的一个应用。
排课管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以排课管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件排课,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对排课信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高排课管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。因此,开发这样一套管理软件成为很有必要的事情,在下面的各章中我们将以开发一套排课管理系统为例,谈谈其开发过程和所涉及到的问题及解决方法
计算机已经成为我们学习和工作的得力助手:今天,计算机的价格已经十分低廉,性能却有了长足的进步。它已经被应用于许多领域,计算机之所以如此流行的原因主要有以下几个方面:首先,计算机可以代替人工进行许多繁杂的劳动;其次,计算机可以节省许多资源;第三,计算机可以大大的提高人们的工作效率;第四,计算机可以使敏感文档更加安全,等等。 在中小学中用计算机管理排课的意义现在我国的中小学校中排课的管理水平还停留在纸介质的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。我作为一个计算机应用的大专生,希望可以在这方面有所贡献。改革的总设计师邓小平同志说过"科学技术是第一生产力",我希望能用我四年的所学编制出一个实用的程序来帮助中小学进行更有效的课程管理。
归纳起来,好处大约有以下几点:
1. 可以存储历届的排课,安全、高效;
2. 只需一到二名排课录入员即可操作系统,节省大量人力;
3. 可以按照录入人员的输入来自动生成课程表,并尽量减少冲突等情况发生。 排课的设计分析根据实际情况,我们使用原型法(Rapid Prototyping)即以少量代价快速地构造一个可执行的软件系统模型。使用户和开发人员可以较快地确定需求,然后采用循环进化的开发方式,对系统模型作连续的精化,将系统需具备的性质逐渐增加上去,直到所有的性质全部满足。此时模块也发展成为最终产品了。
编程环境的选择微软公司的Visual Basic 6.0是Windows应用程序开发工具,使目前最为广泛的、易学易用的面向对象的开发工具。Visual Basic提供了大量的控件,这些控件可用于设计界面和实现各种功能,减少了编程人员的工作量,也简化了界面设计过程,从而有效的提高了应用程序的运行效率和可靠性。故而,实现本系统VB是一个相对较好的选择。 关系型数据库的实现Access2000 就是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。Access 的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel 的电子表格,可以使数据库一目了然。另外,Access 允许创建自定义报表用于打印或输出数据库中的信息。Access也提供了数据存储库,可以使用桌面数据库文件把数据库文件置于网络文件服务器,与其他网络用户共享数据库。Access 是一种关系数据库工具,关系数据库是已开发的最通用的数据库之一。如上所述,Access 作为关系数据库开发具备了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功能。
二者的结合(DBA)微软的JET数据库引擎提供了与数据库打交道的途
径,我们是通过它以及Visual Basic 来访问数据库并对其进行各种操作。Visual Basic、Access以及其他微软的软件产品都是通过共用JET数据库引擎,从而给用户提供了丰富的数据类型。当今的微软对数据库中的ADO比较注视,并在.net上使用了ADO.net技术,鉴于ADO在很多程序里的广泛应用,使用ADO来连接数据库将是最为适用的,并且在定义了ADO的连接模块后,对于将来的升级也会很方便,只要修改一下连接源,就可以轻松的更换后台。
(1) 初始设置模块包括四个子模块,即:备份以前数据、载入以前数据、清除以前数据和清除排课数据;
备份以前数据包括:对原有排课数据的备份和对原有课程申请数据的备份;
载入以前数据包括:对原有排课数据的载入和对原有课程申请数据的载入;
清除以前数据包括:对原有排课数据的清楚和对原有课程申请数据的清楚;
清除排课数据:是对已有排课数据进行清楚以用于新的排课数据的建立。
(2) 辅助功能子系统功能;
课程类型信息,年级专业信息,日程安排信息,班级信息,教室信息,教师信息和课程信息的添加、删除和修改。
(3) 用户管理子系统功能;
用户的添加和删除,用户密码的设置和修改,用户权限的设置,用户重新登陆。
(4) 课表管理子系统功能;
包括班级课表、教师课表、教室课表、日期课表的查询功能实现的操作。
(5) 课表管理子系统功能;
包括班级课表、教师课表、教室课表、日期课表的查询功能实现的操作。
(6)系统管理子系统功能;
包括用户管理、日志查看、用户密码的修改和退出系统的功能实现的操作。
(7) 排课管理子系统功能;
包括课程申请管理,手动排课和自动排课三个子模块;其中最重要的模块就是课程申请管理子模块,它是进行自动排课的依据。
本系统主要由两个模块组成。分别是前端的用户管理模块和后端的数据库管理模块。
本论文共分为摘要、正文和结尾三大部分。其中正文分为六章。第一章为绪论,第二章为系统需求分析,第三章为系统总体设计,第四章为系统详细设计,第五章为应用程序的测试,第六章为结论。摘要部分简明的概括了系统的内容和功能。最后为参考文献。
课程表问题又称时间表问题,是一个多因素的整体优化问题。1975年,S.Even等人论证了课表问题是NP完全类问题。由于课程表问题所涉及的信息较多,并且求解课程表问题最优解的时间复杂性是课程表规模的指数级,所以一般采用求近似最优解的算法。在现实生活中,人们一般也只是要一个满足各种条件的近似最优解,或者说 “满意解”,而不一定非要最优解不可。因此,对于课程表问题,关键不是如何找到最优解,而是如何提高解的满意度。
遗传算法是John.H.Holland根据生物进化的模型提出的一种优化算法,它是基于进化过程中的信息遗传机制和优胜劣汰的自然选择原则和搜索算法。它从一个种群开始,利用选择、交叉、变异等遗传算子对种群进行不断进化,最后得到全局最优解或近似最优解。根据其算法特点,遗传算法非常适合于排课表问题。
一、问题描述
考查课表的约束条件,最基本的要求无外乎这样几个:
(一)每个班级在同一时间只能上一门课;
(二)每个普通教室和实验室在同一时间只能容纳一个班上课,大教室和操场可以容纳其容量允许的班级数上课;
(三)每个教师在同一时间只能在一个地点上课。
以上约束,称为硬约束,因为不如此,课表是不可行的。还有一些约束如:某个教师希望或不希望在某个时段上课;自习课和体育课最好不排每天的一二节课;同一门课在一周内的分布尽可能均匀等,这些要求称为软约束,因为它们或者可以通过排课以外的方法,如变更其他事务的日程安排等加以解决;或者只能尽可能满足,而不可能全部满足。
满足硬约束的课表是合法的,但却不一定是令人满意的。那么如何提高一个课表的满意度呢?可以请各个教师填一张“时段偏好”表,在每个上课时段上标上相应的数值,以确定他希望或不希望在某个时段上课――0表示不希望,1表示无所谓,2表示希望,3表示强烈希望。并且每个教师根据职称,或职务,或所上课程重要性的不同确定优先级:1,2,3级逐级递增,这样一张课表的满意度就很好计算了:每个上课时段所对应的上课老师的“时段偏好”值乘以这个老师的优先级的积的总和。
另一个决定课表好坏的度量就是同一门课在一周内的分布尽可能均匀,即课程的分散度。如果该课程一周只上一次,分散度设为1,如果一次以上,则可以将每次间隔的时段数相乘,因为分布越平均,其乘积就越大。将所有课程的分散度相加即总的课表的分散度。
定义适应度函数:适应度=满意度+分散度。
二、遗传算法
(一)初始化
根据班级信息表以及它与本学期课程信息表的关系,找到每个班的所有课元,再根据这些课元,以及本学期课程表和排课表之间的关系,找到这个班的所有排课元。假设每星期上5天课,每天2节连上,有3个时间段,则每星期有15个上课时间段。那么将这15个时间段随机地分配给上述某个班的所有排课元,也就是排好了一个班的课表。一个班的“排课元”的数目一定是小于或等于15的。如果小于则有时段未排到,即是自习时间。可在“班级信息表”新建一个临时字段“自习”,记录这些自习时间。
再来排教室。给每个班安排一个满足人数要求的教室作为固定教室。一般的课程就在固定教室上,如果是语音课则排语音室,如果是体育课则安排操场,如果是实验课则排实验室。排的时候注意比较该教室的“已排”字段,如与已排时段有冲突,则更换时段。
对每个班做上述工作,则排好了一张初始课表。这张初始课表肯定有很多 “硬冲突”,必须消除。由于排课时已经注意了教室的时段不能冲突,所以只要查看教师的时间有无冲突即可。根据教师信息表与本学期课程信息表的关系,得到每个教师的课元,再根据这些课元,以及本学期课程信息表与排课表的关系得到该教师的所有排课元。检查这些排课元的时段,如有重复,则须调课:首先考虑与自习课调,班级信息表的“自习”字段记录了该班的自习时段。如果这些自习时段都与该老师的上课时间有冲突,则考虑能否用大教室,查看该老师在该时段所上课程的教室要求能否用大教室,如能,统计该老师在该时段的上课班级的总人数,安排一个能容纳这么多学生的大教室。如果大教室方案不能解决问题,则只能和同班的其他老师调换,但注意只能和未检查过冲突的老师换,以免循环调换。
(二)建立初始种群
计算消除了硬冲突的课表的适应度函数,记录在数组中。将该排课表考贝到新数据集ds2。拷贝过来的这个排课表即一个“染色体”。重复上述过程,直至染色体数目达到种群规模。
(三)遗传操作
对ds2 中的每张表做如下操作:
1.选择。采用“随机竞争法”。随机选取两张表,比较它们的适应度,删除适应度小的表,复制适应度大的表替换它。
2.变异。设变异概率为Pm,随机产生一个(0,1)范围内的数,如果小于Pm,才进行变异操作。随机选取两天,让这两天的时段互换。这样做的好处是不用纠错。
3.交叉。类似地,设交叉概率为Pc,随机产生一个(0,1)范围内的数,如果小于Pc,才进行交叉操作。这里采用“单点交叉”。随机选两张表,再随机选取一个序号,让这两张表中这个序号的记录的“上课时段”值互换。互换后这两张表都要纠错,消除硬冲突。过程仿初始化时的消除冲突过程。只是要注意,如果调换的排课元涉及到大教室,须换回所在班的固定教室。重复该过程,注意每一步操作后都要更新适应度数组,使数组值与表一致。迭代500代后,选取最大适应度的表传回ds1排课表。
遗传算法的基本思想正是基于模仿生物界的遗传过程。它把问题的参数用基因代表,把问题的解用染色体代表(在计算机里为字符串),从而得到一个由具有不同染色体的个体组成的群体。这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和产生后代。后代随机化地继承了父代的最好特征,并也在生存环境的控制支配下继续这一过程。群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体,即得到问题最优的解。值得注意的一点是,现在的遗传算法是受生物进化论学说的启发提出的,这种学说对我们用计算机解决复杂问题很有用,而它本身是否完全正确并不重要(目前生物界对此学说尚有争议)。
遗传算法的基础思想是在本世纪50年代初,由于一些生物学家尝试用计算机模拟生物系统演化时而提出的。
遗传算法是模拟生物通过基因的遗传和变异,有效地达到一种稳定的优化状态的繁殖和选择的过程,从而建立的一种简单而又有效的搜索方法。它运用随机而非确定性的规则对一族而非一个点进行全局而非局部地搜索,它仅利用目标函数而不要求其导数或其它附加限制,它虽然在特定问题上效率也许不是最高,但效率远高于传统随机算法,是一种普遍适用于各种问题的有效方法。遗传算法的主要思路有:
1、繁殖(reproduction):繁殖是根据现有各个体的目标函数值,确定其生存概率,模拟生物界的自然选择,劣者淘汰,适者生存。在遗传算法中,我们人为地保持种群包含的个体总数不变。比较优秀的个体(模型)有较大的生存概率,并可能繁衍,比较差的个体(模型)可能会淘汰。这样产生的下一代的个体,一般都具有较大目标函数值,因而有较大的生存概率。
2、交配(crossover):从种群中随机地选择两两一组的双亲,分别随机地交换部分染色体,各自产生两个新染色体。
3、变异(mutation):染色体按一定概率(一般很小)可随机地产生变异。
遗传算法能够解决的问题不仅限于最优化问题,但无论哪种问题,都要解决两个关键问题:(1)必须能将问题的解答用一组二进制数码表示,即建立解答与二进制数码间的映射(mapping)关系。(2)定义一种对最佳解的定量量度,即适度函数。
霍兰德的遗传算法通常被称为“简单遗传算法”(SGA)。现以此作为讨论对象,分析遗传算法的结构和机理。
结合如下的货郎担问题(简记TSP)分析:
设有n个城市,城市i和城市j之间的距离为d(i,j), i,j=1,...,n.TSP问题是要找遍访每个域市恰好一次的一条回路,且其路径总长度为最短。
一、编码与译码
许多应用问题结构很复杂,但可以化为简单的位串形式编码表示。
将问题结构变换为位串形式表示的过程叫编码;而相反将位串形式编码表示变换为原问题结构的过程叫译码。
我们把位串形式编码表示叫染色体,有时也叫个体。
对TSP可以按一条回路城市的次序进行编码,比如码串134567829表示从城市1 开始,依次是城市3,4,5,6,7,8,2,9,最后回到城市1。
一般情况是从城市w1开始,依次经过城市w2,……,wn,最后回到城市w1,我们就有如下编码表示:
w1 w2 …… wn
由于是回路,记wn+1= w1。它其实是1,……,n的一个循环排列。要注意w1,w2 ,……,wn是互不相同的。
二、适应度函数
为了体现染色体的适应能力,引入了对问题中的每一个染色体都能进行度量的函数,叫适应度函数。
通过适应度函数来决定染色体的优、劣程度,体现了自然进化中的优利劣汰原则。对于优化问题,适应度函数就是目标函数。
目标函数是指,优化目标与设计变量之间的函数关系式,是所关心的目标(某一变量)与相关的因素(某些变量)的函数关系。
目标函数是把优化问题转化成为数学问题,经过分析、研究,抓住主要因素,建立合适的数学模型。
例:为了实现增产、增收、提高土地利用率的目的,利用农作物生长的季节差、时间差,把相同或不同类的农作物套种在一起。
目标函数是增产增收和提高土地利用率与土地的单位面积农作物收益的总和之间的关系。
Smax=f(x1,x2,x3,…)
TSP的目标是路径总长度为最短,路径总长度的倒数就可以为TSP的适应度函数:
请注意其中wn+1= w1。
适应度函数要有效反映每一个染色体与问题的最优解染色体之间的差距,一个染色体与问题的最优解染色体之间的差距小,则对应的适应度函数值之差就小,否则就大。
三、遗传操作
简单遗传算法的遗传操作主要有三种:选择、交叉、变异。
选择操作也叫复制操作,根据个体的适应度函数值所度量的优、劣程度决定它在下一代是被淘汰还是被遗传。
一般地说,选择将使适应度较大(优良)个体有较大的存在机会,而适应度较小(低劣)的个体继续存在的机会较小。
简单遗传算法采用赌轮选择机制,令Σfi表示群体的适应度值之总和,fi表示种群中第i个染色体的适应度值,它产生后代的能力正好为其适应度值所占份额fi/Σfi。
交叉操作的简单方式是将被选择出的两个个体P1和P2作为父母个体,将两者的部分码值进行交换。假设有如下八位长的二个体:
产生一个在1到7之间的随机数c,假如现在产生的是3,将P1和P2的低三位交换:P1的高五位与P2的低三位组成数串10001001,这就是P1和P2的一个后代Q1个体;P2的高五位与P1的低三位组成数串11011110,这就是P1和P2的一个后代Q2个体。
其交换过程如下所示:
变异操作的简单方式是改变数码串的某个位置上的数码。我们先以最简单的二进制编码表示方式来说明,二进制编码表示的每一个位置的数码只有0与1这两个可能,比如有如下二进制编码表示:
其码长为8,随机产生一个1至8之间的数k,假如现在k=5,对从右往左的第5位进行变异操作,将原来的0变为1,得到如下数码串(红色的数字1是被变异操作后的):
二进制编码表示时的简单变异操作是将0与1互换:0变异为1,1变异为0。
现对TSP的变异操作作简单介绍,随机产生一个1至n之间的数k,决定对回路中的第k个城市的代码wk作变异操作,又产生一个1至n之间的数w,替代wk,并将wk加到尾部,得到: w1 w2 …… wk-1 w wk+1 …… wn wk
你发现这个串有n+1个数码,注意数w其实在此串中出现重复了,必须删除与数w相重复的,得到合法的染色体。
四、控制参数
并不是所有被选择了的染色体都要进行交叉操作和变异操作,而是以一定的概率进行,一般在程序设计中交叉发生的概率要比变异发生的概率选取得大若干个数量级,交叉概率取0.6至0.95之间的值;变异概率取0.001至0.01之间的值。
种群的染色体总数叫种群规模,它对算法的效率有明显的影响,规模太小不得于进化,而规模太大将导致程序运行时间长。对不同的问题可能有各自适合的种群规模,通常种群规模为30至100。
遗传算法类似于自然进化,通过作用于染色体上的基因寻找好的染色体来求解问题。
与自然界相似,遗传算法对求解问题的本身一无所知,它所需要的仅是对算法所产生的每个染色体进行评价,并基于适应值来选择染色体,使适应性好的染色体有更多的繁殖机会。
在遗传算法中,通过随机方式产生若干个所求解问题的数字编码,即染色体,形成初始群体;
通过适应度函数给每个个体一个数值评价,淘汰低适应度的个体,选择高适应度的个体参加遗传操作,经过遗传操作后的个体集合形成下一代新的种群。对这个新种群进行下一轮进化。
这就是遗传算法的基本原理。
遗传算法思想:
(1) 初始化群体;
(2) 计算群体上每个个体的适应度值;
(3) 按由个体适应度值所决定的某个规则选择将进入下一代的个体;
(4) 按概率Pc进行交叉操作;
(5) 按概率Pc进行突变操作;
(6) 没有满足某种停止条件,则转第(2)步,否则进入(7);
(7) 输出种群中适应度值最优的染色体作为问题的满意解或最优解。
程序的停止条件最简单的有如下2种:
一是完成了预先给定的进化代数则停止;
二是种群中的最优个体在连续若干代没有改进或平均适应度在连续若干代基本没有改进时停止。
根据遗传算法思想可以画出简单遗传算法框图
一些研究人员对进化算法的运行机理进行过研究,证明了一般的遗传算法不一定收敛,只有每代保存了最优个体时才收敛。在实际应用中,使用了上述结论来保证收敛性。
优秀个体保护法就是将每代中的最优个体,直接进入子代,相应淘汰其子代中适应度最差的个体,使种群规模不变。
对保存最优个体时遗传算法是收敛的结论的证明是通过对遗传算法构造马尔柯夫(markov)链,因为遗传算法的进行过程是一个马尔柯夫过程。
当遗传算法收敛时,求到的解通常只是所要解决问题的最优解的一个近似解,或者叫满意解。
从数学分析的角度看,收敛过程是一个无限逼近过程,而计算过程是一个有限自动机,因此通过遗传算法程序求得的解总是一个近似解。
上面指出遗传算法程序求得的解是一个满意解,哪些因素会影响到解的质量?这正是遗传算法的性能问题。
首先要注意的是种群的规模要适当,种群规模太小,种群中就没有充分的多样性,不利于适应度值高的染色体的进化,致使算法得不到满意的解。可以认为种群规模大有利于种群的进化,种群健壮发展,但染色体多,每进行一轮进化花费的机器时间就多,致使算法的效率低。
适应度函数的构造对遗传算法的性能影响较大,由于适应度是衡量染色体优劣的准则,有时优劣染色体的适应度值没有拉开距离,必要提升优良染色体的适应度值,降低劣弱染色体的适应度值,给优良染色体很多的生存机会,达到提高进化速度的目标。可以结合所求解问题的实际情况对适应度函数作适当的变换,提高选择过程的效率。
如下有一个线性变换:
式中fi为个体的适应度,fyi为变换后的适应度值,c1、c2为常数。
C1和C2的选取主要依具体问题的情况而定,并应满足一定的约束条件(例如变换后的适应度值不能是负值等)。
适应度函数直接作用到了选择操作,也就是说选择操作的性能主要是由适应度函数来决定,但是怎样运用适应度函数是需要研究的。
对遗传算法的性能影响最大的也许是交叉和变异操作。
首先是交叉和变异操作并不是都要进行,对某些问题遗传算法求解时其性能主要由交叉操作决定,甚至没有变异操作时,算法的性能更好;而对另外的某些问题遗传算法求解时其性能主要由变异操作决定,甚至不要交叉操作更合适。
交叉和变异操作的更重要的是不同的问题要构造一些性能更优的交叉和变异操作,才能保证算法的高效率,构造时往往需要对所要求解的问题进行分析和运用一些经验。
例如,TSP求解时,前面使用的交叉操作使回路中的左边部分的城市改变较大,但对TSP来说,对回路中的各个位置应有同等的进行机会,于是有如下改进的交叉操作,将两个被选出的染色体,都随机地分成三段(两个染色体的分法相同),再从三段中随机地选取一段在两染色体之间进行交换,形成新染色体。
求解TSP的变异操作有如下更有效的方式:
随机产生1和n之间的两相异整数k和m,若k<m,则将
(w1,w2,…,wk, wk+1,…,wm,…,wn)
变为:
(w1,w2,…,wm, wm-1 ,…,wk+1, wk,…,wn).
如果是k>m,则将
(w1,w2,…,wk, wk+1,…,wm,…,wn)
变为:
(wm,wm-1,…,w1,wm+1,…,wk-1,wn,wn-1,…,wk).
上述变换方法可简单说成是“逆转中间或者逆转两端”。
这个变异操作针对TSP非常适用,仅使用这一个变异操作,不使用其他的变异操作和任何交叉操作,构造了改进的遗传算法,发现其性能相当不错,在解的质量相当的情况下,花费的总机时少。
交叉概率和变异概率选取也是遗传算法的性能影响最大的因素之一,直接影响着收敛速度。我们着重讨论变异概率,变异概率大会扩大搜索范围,使搜索过程不陷入局部极小。
但也可能使正朝着最优解缓慢前进的个体改变方向,破坏好个体;变异概率大则对染色体的破坏大,因此常设定一大一小两个变异概率,当整个种群平均适应度增长较快时,使用小变异概率;反之使用较大变异概率。对整个种群使用相同的变异概率,并不利于优良个体的成长和劣个体的改良。
回顾遗传算法常使用的收敛准则是每代保留最优个体,这个要求其实也在降低算法的效率,因为将导致一些个体早熟和降低种群的多样性。
讨论一个新问题:
交叉或变异产生的新个体能否与父个体进行竞争。按简单遗传算法,交叉或变异产生的新个体不论优劣都取代父个体,并不科学。对新个体要有与父个体进行竞争的机会,当父个体比新个体优时,按一定的概率保留父个体而舍去新个体。
停止的条件,与解的质量有关系,由于所要解决的问题的最优解预先不知道,就连一个供参考的近似解也不可能有,停止条件就成了一个值得研究的方面。如果按预设的进化代数作停止条件,由于不同的问题的复杂度不同,而且对同一问题构造的遗传操作不同其算法性能不同,因此很难合理地预设一个进化停止代数。
另一个常用的停止条件是种群中的最优个体在连续若干代没有改进或平均适应度在连续若干代基本没有改进时,这是一个比较合理的方式,但可能由于构造的算法在进化机制上存在不合理因素,出现进化进程缓慢,或者个别个体早熟,导致过早结束运行,得到一个质量很差的解。
例:遗传算法在试题组卷中的应用
自动组卷如何保证生成的试卷能最大程度的满足用户的不同需要,并具有随机性、科学性、合理性,这是实现中的一个难点。尤其在交互式环境下用户对于组卷速度要求较高,而一个理论上较完美的算法可能会以牺牲时间作为代价,往往不能达到预期的效果。
一般来说,用户在自动组卷时会对试卷的质量提出多方面的要求,如总题量、平均难度、题型比例、章节比例、重点章节比例、知识点的交叉与综合等,自动组卷就应最大程度的满足用户的要求。因此,在组卷之前,我们首先为自动组卷过程建立控制指标相应状态空间D。
D的每一行由某一试题的控制指标组成,如题号、题型、章节、难度等,并且这些属性指标都进行编码表示成二进制形式,而每一列是题库中的某一指标的全部取值。在具体出题时,考方可能不会用到所有的指标,所以D包含的个体d_target可以表示为d_request和d_void,d_request表示考方要求的控制指标,d_void表示考方不要求的控制指标。
考试自动出题的遗传算法如下:
(1) 根据考方的出题要求,规划状态空间库D中的数据,保留d_request部分,而不要d_void部分,对其剩余部分进行编码D [1],D[2],……D[i]。
(2) 初始化试题库[STK]。随机从题库中抽出一组试题,并进行编号STK[1],STK[2]……STK[j],确定合适的交换概率Pc和变异概率Pm;并定义其适应值flexibility[k](k=1,2……j)
(3) 从试题库[STK]中取出STK[m](0≤m≤j)与状态空间库[D]中的指标D[n] (0≤n≤i)进行匹配。如果STK[m]与D[n]完全匹配,则
flexibility[k]<-flexibility[k]+1
如果不匹配,则有
flexibility[k]<-flexibility[k]+0
(4) 进行淘汰选择,保留具有高适应度的试题。即把flexibility[k]为0的STK[m]去掉,这样就生成了一个新的试题模型STK[h]。
(5) 重复过程2生成新的试题模型STK[p]。按一定的交换概率Pc从[STK]中随机选取模型STK[h]和STK[p],交换彼此位串中对应的值,产生新的试题模型STK[h]、STK[p]。
(6) 按一定的变异概率从题库[STK]中随机选出一试题模型STK[h]进行基因突变,产生一个新的试题模型。
(7) 在完成以上选择、交叉、变异步骤后,产生一个考试试题模型,按照事先确定的误差精度对其进行收敛性的判别,当其适应度高时,试题组卷成功,转向步骤8,如果其适应度低,则转向步骤3继续执行。
(8) 输出相应的考试试题,组卷结束。
以上用遗传算法抽题时,交换概率Pc和变异概率Pm的确定很重要。
太小使选题工作进展缓慢,太大则会破坏适应值高的试题模型。通常规定其为0.4。同样,Pm太小就不能产生新的试题模型,太大又会产生过多的试题模型。它宜规定为0.1。
自动选题时,选题的方式可采用父辈挑选和生存选择两种。父辈挑选就是采用不返回随机抽样,它使每个题目都有被选中的可能;生存选择采用允许父辈和子代进行竞争,并让其中的优良者进入下一轮竞争环境的二分之一择优选择。
两种选择方式共同作用于选题保证了选题的顺利完成。在选题的过程中,哪一道题目被选中是一个非均匀随机事件,其概率依赖于上一次选题的过程。
硬件环境: AMD 2200+,1GB内存,20G硬盘,64mb显卡
系统软件: Windows 2000 Advanced Server
DBMS: SQL SEVER 2000
开发语言: Microsoft Visual Basic 6.0
Visual Basic是Microsoft公司推出的程序设计语言,具有简单易学、功能强大、软件费用支出低、见效快等特点。它提供了开发Windows应用程序最迅速、最简捷的方法。它不但是专业人员得心应手的工具,而且易于被非专业人员掌握使用,全世界数以百万计的程序设计人员正在使用Visual Basic开发各种类型的软件。从1.0到4.0版本,Visual Basic只有英文版,5.0版以后的Visual Basic在推出英文版的同时,又推出了中文版,这大大方便了中国的用户。Visual Basic6.0是在Visual Basic5.0的基础上推出的,在某些方面较5.0版有重要的改进,它所提供的开发环境与Windows 9x或Windows NT具有完全一致的界面,使用更方便,其代码效率已达到Visual C++的水平。在面向对象程序设计方面,6.0版的Visual Basic全面支持面向对象的程序设计,包括数据抽象、封装、对象与属性、类与成员、继承和多态等。和Visual Basic5.0一样,Visual Basic6.0也包括三种版本,即学习版、专业版和企业版,这些版本是在相同的基础上建立起来的,因此大多数程序可以在三种版本中通用。
Visual Basic(以下简称VB)可以说是可视化语言的先驱了,而且它也是可视化程度最高的一个,从几年前VB诞生之日起到现在,它已经经历了六个版本,这么高的更新率,不外乎说明两个问题:用户对VB的热衷,微软对VB的重视。不可否认微软对市场的预测能力是极为高明的,而它强大的技术、财力支持也使它在许多以前未进入的领域,在不长的时间内有成为最有力的竞争对手。
VB的出现可以说是Microsoft Windows的日渐成熟的必然产物。Microsoft Windows为程序员和最终用户提供了一个共同的人机界面。对用户,Windows提供了一个图形鼠标的操作环境,该环境对所有的应用程序都一样;对于程序员,Windows提供了一组预定义工具――称之为Microsoft Windows 的软件开发工具箱(SDK),该工具能使程序员建立一个与Windows界面相同的应用程序,而且,程序员不必关心最终用户的硬件配置情况。在这一开发环境中,程序员唯一困难的是Microsoft SDK提供了六百多个函数和与其一致的事件驱动(event-driven)编程技术。两种新方法的交叉使众多的程序员重新陷入困境,程序员不仅要掌握程序驱动编程技术和六百多个函数的功能,而且还得用C语言描述这些问题。因此一般情况下,程序员首先要掌握C程序设计技术,而后再开始学习SDK。这样的条件下就要求在Microsoft多任务环境下出现一种操作方便,使用简单的新工具--Visual Basic由此诞生。
英文Visual的意思是“视觉的”,“可视的Basic”这个名字可能抽象了点,但实际上它却是最直观的编程方法,之所以叫做“可视”,你只要看到VB的界面就会明白,实际上你无需编程,就可以完成许多步骤。在VB中引入了控件的概念,在Windows中控件的身影无处不在,各种各样的按钮、文本框、无线钮,都是控件的种类,VB把这些控件模式化,并且每个控件都有若干属性用来控制控件的外观,工作方法。这样你就可以象在画板上一样,随意点几下鼠标,一个按钮就完成了,这些在以前的编程语言下是要经过相当复杂的工作的。
Visual basic 6.0具有的特点:
(1) 统一的数据访问,集成了ADO/OLE支持。
(2) 将可视化的数据库工具集成到了Visual Basic环境中。
(3) 新的Oracle模式和存储过程设计能力。
(4) 数据环境设计器(Data Environment Designer)工具可实现基于ADO的数据访问组件。
(5) 新的集成化的报表书写器(Report Writer)工具。
(6) 分层的FlexGrid(Hierarchical FlexGrid)控件可用于显示分级数据。
(7) 具有创建数据源的功能。
(8) 可创建OLE DB 提供者(OLE DB Provider)。
(9) 可方便地进行机器间和层次间的远程数据访问。
(10)高级数据绑定。
Access是Office系列软件中用来专门管理数据库的应用软件。所谓数据库是指经过组织的、关于特定主题或对象的信息集合。数据库管理系统分为两类:文件管理系统和关系型管理系统。Access应用程序就是一种功能强大且使用方便的关系型数据库管理系统,一般也称关系型数据库管理软件。它可运行于各种Microsoft Windows系统环境中,由于它继承了Windows的特性,不仅易于使用,而且界面友好,如今在世界各地广泛流行。它并不需要数据库管理者具有专业的程序设计水平,任何非专业的用户都可以用它来创建功能强大的数据库管理系统。本章将专门介绍Access 2002(下面简称为Access)的基本功能及其常用的操作,主要内容包括创建和使用数据表,建立和使用查询、窗体,以及数据表与其他数据文件之间的转换等。
数据库技术是计算机软件的一个重要分支,它产生于20世纪60年代,最早是由IBM公司推出的IMS数据库系统。数据库技术从开始到现在大致经历了三个阶段,分别是:人工管理阶段、文件管理阶段和数据库管理阶段。
Access使用标准的SQL(Structured Query Language,结构化查询语言)作为它的数据库语言,从而提供了强大的数据处理能力和通用性,使其成为一个功能强大而且易于使用的桌面关系型数据库管理系统和应用程序生成器。
一个Access数据库中可以包含表、查询、窗体、报表、宏、模块以及数据访问页。不同于传统的桌面数据库(dbase、 FoxPro、Paradox), Access数据库使用单一的*.mdb文件管理所有的信息,这种针对数据库集成的最优化文件结构不仅包括数据本身,也包括了它的支持对象。
此外,Access 2002还利用Office套件共享的编程语言VBA(Visual Basic for Application)进行高级操作控制和复杂的数据操作。
应用Access的第一步就是启动Access,常用的启动方式有下面几种:
l 从开始菜单启动Access。单击【开始】→【程序】→【Microsoft Access】,启动后的画面如图9-1所示。
l 用“运行”命令启动Access。单击【开始】→【运行】,在“运行”对话框中输入命令:msaccess,按【确定】按钮即可。
l 通过打开已有的数据库来启动Access。在Windows资源管理器中,双击一个Access数据库,即可启动Access,并打开该数据库(见图9-2)。
要退出Access,可选择菜单【文件】→【退出】,或通过单击Access主窗口的关闭按钮。
直接启动Access时的窗口
通过打开已有的数据库来启动Access
Access默认的窗口由标题栏、菜单栏、数据库工具栏、数据库窗口和状态栏组成,象Office的其他应用软件一样,Access 2002也增加了任务窗格,它的使用方法和本书前面章节中介绍的方法一样。工具栏和菜单栏的可用项是与当前数据库窗口的内容密切相关的,也就是说,工具栏和菜单栏会随着数据库窗口显示的内容的不同而变化。
Access中创建和处理的文件是数据库文件,其扩展名为 .mdb。与Microsoft Office中其他的应用程序(Word、Excel等)不同的是,Access启动后,并不自动创建一个空的文件,然后让用户输入数据,再保存。在Access中,需要用户自己来创建一个新的数据库文件。
在图9-1新启动的Access窗口中,单击任务窗格中的“新建空数据库”项,Access会马上弹出一个对话框让用户给出要新建的数据库的文件名。这也是和Office中其他的软件不同的。输入文件名后,Access打开一个新窗口,如下图所示。
在该窗口的标题栏中显示了新建数据库文件的名称,如图中的“Myfirst”,窗口工作区的左窗格中列出了数据库可包含的主要对象类型,右窗格中列出的是创建当前对象的向导和具体的对象名称。
另外,还可以在任务窗格中单击“根据模板新建”,使用数据库向导来创建新的数据库。数据库中具体内容的创建将在后面作介绍。
Access可打开的文件类型包括Excel电子表格、Dbase数据库、文本文件、Paradox数据库、Web页以及Access自己生成的mdb文件。在任务窗格的“打开文件”项下,可以选择曾经使用过的文件直接打开,也可以使用菜单【文件】→【打开】或常用工具栏的打开按钮 ,在“打开对话框”中选择文件来打开。在一个Accss窗口中,同一时刻只能打开一个Access数据库,当打开或新建一个数据库时,会自动关闭原来打开的数据库。如果需要打开多个数据库,则要启动多个Access窗口。
Access具有全环绕数据库文件结构,可以在一个mdb文件中包含数据对象(表、索引、查询)和应用对象(窗体、报表、宏、VBA代码模块)。在一个打开的Access数据库窗口(图9-2)中,分组显示了数据库包含的对象,其类型包括表、查询、窗体、报表、页、宏、模块等。一个Access数据库可以包含多达32768个对象(表、查询、报表等的组合),下面对这些对象作一简要介绍。
表:存储数据的容器,是关系数据库系统的基础。表以行列格式存储数据项,这一点和电子表格有些类似。表中的单个信息单元(列)称为字段,在表的顶部可以看到这些字段名;表的一行中所有数据字段的集合,称为记录。用户可以从其他的应用系统(如 dBASE、FoxPro、Paradox)、客户/服务器数据库(如 SQL Server)以及电子表格(如Excel工作表和Lotus1-2-3)中导入表。Access可以同时打开1024个表。
查询:显示从多个表(最多为16个)中选取的数据。通过使用查询,用户可以指定如何表示数据,选择构成查询的表,并可以从所选表中提取出最多255个特定的字段。用户可以通过指定要查询数据的条件来决定显示的数据项。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。