公司客户最近要做一个在线考试系统,其中难点在于自动组卷,因为普通的随机方法难度不好掌握,所以领导希望采用遗传算法。算法研究的任务领导交给了我,希望能在端午放假回来看到结果。而我之前并没有听说过遗传算法(孤陋寡闻),但领导分配的任务我不可能说不做(不做回家种地去),所以硬着头皮接了下来,开始GOOGLE遗传算法原理。其中一篇博文基于遗传算法自动组卷的实现对我帮助很大,同时我也联系了此博文的作者,希望能得到他的指点。没想到下午就收到回信,说这篇文章只是纯理论的研究。真正的项目早已找不到了。另外信中给了我几篇关于遗传算法的资料,给了我最直接的帮助。废话不多说,下面直接给代码,代码不难,我也不做解释,请有兴趣的童鞋自己研究(代码现在只是在测试阶段,写得很乱,将就着看吧):
using System;
using System.Windows.Forms;
using System.IO;
namespace GA
{
public partial class Form1 : Form
{
TTm[] TP;
int _ts = 0;
int n = 10;
int m = 12;
int Pc = 50; //杂交的概率
int Pm = 80; //变异的概率
decimal _nd = 2;
int[] Fs = { 2, 2, 2, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 10, 10, 15, 15, 15, 15, 15, 20, 20, 20, 20 }; //题目分数
int[] Nd = { 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5 }; //题目难度
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
n = Fs.Length;
m = Fs.Length;
TP = new TTm[n];
var P