亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? auto.cpp

?? 使用改進的遺傳算法實現簡單的高校排課
?? CPP
字號:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "auto.h"
#include<time.h>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TAutoForm *AutoForm;
//---------------------------------------------------------------------------
__fastcall TAutoForm::TAutoForm(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TAutoForm::FormClose(TObject *Sender, TCloseAction &Action)
{
     Action = caFree;
}

void __fastcall TAutoForm::ComboBox1Change(TObject *Sender)
{
    AnsiString temp, tmp;

    ListBox1->Clear();
    if (ComboBox1->Text == "1年級")
    {
         grade = 1;
    }
    else if (ComboBox1->Text == "2年級")
    {
         grade = 2;
    }
    else if (ComboBox1->Text == "3年級")
    {
         grade = 3;
    }
    else if (ComboBox1->Text == "4年級")
    {
         grade = 4;
    }

    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("select * From Class");
    ADOQuery1->SQL->Add("where Grade = :Grade");
    ADOQuery1->Parameters->ParamByName("Grade")->Value=grade;
    ADOQuery1->Open();
    if(ADOQuery1->RecordCount!=0)
    {
        ADOQuery1->First();
        while(!ADOQuery1->Eof)
        {
            tmp = ADOQuery1->FieldByName("Name")->AsString;
            ListBox1->AddItem(tmp, this);
            ADOQuery1->Next();
         }
    }
}
//---------------------------------------------------------------------------



void __fastcall TAutoForm::ListBox1Click(TObject *Sender)
{
    int  find = 0;

    int  total_curse = 0;
    AnsiString temp;
    int  ins = ListBox1->ItemIndex;

    ADOTable1->Active = false;
    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("select * From Class");
    ADOQuery1->SQL->Add("where Grade = :Grade");
    ADOQuery1->Parameters->ParamByName("Grade")->Value=grade;
    ADOQuery1->Open();
    if(ADOQuery1->RecordCount!=0)
    {
        ADOQuery1->First();
        while(!ADOQuery1->Eof)
        {
            temp = ADOQuery1->FieldByName("Name")->AsString;
            if (find == ins)
               break;
            ADOQuery1->Next();
            find ++;
         }
    }
    Edit1->Text = temp;
    ADOTable1->Filtered = true;
    ADOTable1->Filter = "班級 = '" + temp + "'";
    ADOTable1->Active = true;

    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("select * From plans");
    ADOQuery1->SQL->Add("where 班級 = :Grade");
    ADOQuery1->Parameters->ParamByName("Grade")->Value=temp;
    ADOQuery1->Open();
    if(ADOQuery1->RecordCount!=0)
    {
        ADOQuery1->First();
        while(!ADOQuery1->Eof)
        {
            total_curse += ADOQuery1->FieldByName("周課時")->AsInteger;
            ADOQuery1->Next();
         }
    }
    Edit2->Text = IntToStr(total_curse);

    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("select * From plans");
    ADOQuery1->SQL->Add("where 班級 = :Grade");
    ADOQuery1->Parameters->ParamByName("Grade")->Value=temp;
    ADOQuery1->Open();
    if(ADOQuery1->RecordCount!=0)
    {
        ADOQuery1->First();
        int i=0;
        while(!ADOQuery1->Eof)
        {
            chromize[i]= ADOQuery1->FieldByName("周課時")->AsInteger;
            i++;
            ADOQuery1->Next();
         }
    }

    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("select * From plans");
    ADOQuery1->SQL->Add("where 班級 = :Grade");
    ADOQuery1->Parameters->ParamByName("Grade")->Value=temp;
    ADOQuery1->Open();
    if(ADOQuery1->RecordCount!=0)
    {
        ADOQuery1->First();
        int i=0;
        while(!ADOQuery1->Eof)
        {

            priority[i]= ADOQuery1->FieldByName("課程優先級")->AsInteger;
            i++;
            ADOQuery1->Next();
         }
    }

}
//---------------------------------------------------------------------------
//生成初始群體
void __fastcall TAutoForm::initpop()
{
	int j,j1;
	for(j=0;j<popsize;j++)
	{
            for(j1=0;j1<lchrom;j1++)
            {
                oldpop[j].chrom[j1]=1+Random(25);
            }
            check(oldpop[j].chrom);
            oldpop[j].fitness=objfunc(oldpop[j].chrom);
            oldpop[j].parent1=0;
            oldpop[j].parent2=0;
            oldpop[j].xsite=0;
	}
}
void __fastcall TAutoForm::Button1Click(TObject *Sender)
{
     long int gen,k,j;
	float oldmax;
	int oldmaxpp;
        maxgen=20;
        int max;
        if(!(oldpop=(class pp*)malloc(maxpop*sizeof(class pp))))
	{
		printf("no memory!\n");
		return;
	}
	if(!(newpop=(class pp*)malloc(maxpop*sizeof(class pp))))
	{
		printf("no memory!\n");
		return;
	}
	if(!(p1=(struct pp*)malloc(sizeof(struct pp))))
	{
		printf("no memory!\n");
		return;
	}  
	for(k=0;k<maxpop;k++)
		oldpop[k].chrom[0]=0;
	for(k=0;k<maxpop;k++)
		newpop[k].chrom[0]=0;
	gen=0;
        popsize=10;

	initialize();
	system("cls");
        getchar();
        do
	{
		gen=gen+1;
		oldmax=max;
		oldmaxpp=maxpp;
		generation();
		statics(newpop);
		if(max<oldmax)
		{
                    for(j=0;j<lchrom;j++)//?
                        newpop[minpp].chrom[j]=oldpop[oldmaxpp].chrom[j];
                        newpop[minpp].fitness=oldpop[oldmaxpp].fitness;
                        statics(newpop);
		}
		//report(gen);
		p1=oldpop;
                pcross=0.9;
                oldpop=newpop;
		newpop=p1;
		getchar();
	}while(gen<maxgen);
        max=maxpp;
	Edit3->Text="3";//newpop[max].chrom;//->AsString;
        free(p1);
	free(oldpop);
	free(newpop);
	exit(0);
}
//---------------------------------------------------------------------------
__fastcall TAutoForm::objfunc(int *a)
{
     int i,j,k,f;
        int dispersion=1;//課程分散度
        int Cdispersion=0;//課表分散度
        int optimization=0;//課程優化度
        int Coptimization=0;//課表優化度
        int x=0;
        int y=0;
        int *g;
        for(i=0;i<10;i++)
        {
            int m=chromize[i];//課時數
            int n=priority[i];//優先級
            int t=0;
            int p=0;
            y=x+m;
            if(m==0) break;
            else
            {
                if (m==1)
                {
                    dispersion=1; //只有一個課時
                    if(a[k]%5==0)t=1;
                    else t=(6-a[k]%5);
                    p=t;
                    optimization=p*n;
                }
                else
                {
                    
                    dispersion=1;
                    g=&a[x];
                    order(g,m);
                    for(j=x;j<y-1;j++) //兩個及以上課時
                    {
                        int d=abs(a[j]-a[j+1]);
                        dispersion=dispersion* d;
                        if(d<5) dispersion=0; //一門課放在一天,罰
                        else dispersion+=(d*1); //間隔越多,獎勵越多
                    }
                    for(k=x;k<y;k++)
                    {
                        t=0;
                        if(a[k]%5==0)t=1;
                        else t=(6-a[k]%5);
                        p+=t;
                     }
                     optimization=p*n;
                }

            }
            x=x+m;//下一次掃描起點位置
            Cdispersion+=dispersion;//課程分散度累加成課表分散度
            Coptimization+=optimization;//課程優化度累加成課表優化度
        }
        f=Cdispersion+Coptimization;
        return (f);
}

void __fastcall TAutoForm::statics(struct pp* pop)
{
	int j;
	sumfitness=pop[0].fitness;
	min=pop[0].fitness;
	max=pop[0].fitness;
	maxpp=0;
	minpp=0;
	for(j=1;j<popsize;j++)
	{
		sumfitness+=pop[j].fitness;
		if(pop[j].fitness>max)
		{
			max=pop[j].fitness;
			maxpp=j;
		}
		if(pop[j].fitness<min)
		{
			min=pop[j].fitness;
			minpp=j;
		}
	}
	avg=sumfitness/popsize;
}

void __fastcall TAutoForm::generation()
{
	unsigned int j,mate1,mate2;
	j=0;
	do
	{
		mate1=select();
		mate2=select();
		crossover(oldpop[mate1].chrom,oldpop[mate2].chrom,j);
		check(newpop[j].chrom);
		check(newpop[j+1].chrom);

        newpop[j].fitness=objfunc(newpop[j].chrom);
	    newpop[j].parent1=mate1;
            newpop[j].parent2=mate2;
            newpop[j].xsite=jcross;
        
        newpop[j+1].fitness=objfunc(newpop[j+1].chrom);
	    newpop[j+1].parent1=mate1;
            newpop[j+1].parent2=mate2;
            newpop[j+1].xsite=jcross;
        j+=2;
	}while(j<popsize);
}

__fastcall TAutoForm::select()
{
	float rand1,partsum;
	int j;
	partsum=0;
	j=0;
	rand1=random1()*sumfitness;
	do
	{
		partsum=partsum+oldpop[j].fitness;
		j+=1;
	}while((partsum<rand1)&&(j<popsize));
	return j-1;
}

void __fastcall TAutoForm::crossover(int *a,int *b,int k5)
{
	int j;
	if(flip(pcross))
	{
		jcross=Random(lchrom-1);
		ncross+=1;
	}
	else
		jcross=lchrom;
	if(jcross!=lchrom)
	{
		for(j=0;j<jcross;j++)
		{
			newpop[k5].chrom[j]=a[j];
		    newpop[k5+1].chrom[j]=b[j];
		}
        for(j=jcross;j<lchrom;j++)
		{
			newpop[k5].chrom[j]=(b[j]);
		    newpop[k5+1].chrom[j]=(a[j]);
		}
	}
	else
	{
		for(j=0;j<lchrom;j++)
		{
			newpop[k5].chrom[j]=a[j];
		    newpop[k5+1].chrom[j]=b[j];
		}
	}

}

void __fastcall TAutoForm::randomize1()
{
	int i;
	for(i=0;i<lchrom;i++)
		oldrand[i]=Random(30001)/30000.0;
	jrand=0;
}

__fastcall TAutoForm::random1()
{
	jrand+=1;
	if(jrand>=lchrom)
	{
		jrand=0;
		randomize1();
	}
	return oldrand[jrand];
}

__fastcall TAutoForm::flip(float probability)
{
    float pp;
	pp=Random(20001)/20000.0;
	if(pp<=probability)
		return 1;
	return 0;
}

__fastcall TAutoForm::length(int *a)
{
    int m=0;
    int i;
    for(i=0;i<10;i++)
    {
        m=m+a[i];
    }
    return(m);
}

__fastcall TAutoForm::order(int *b,int l)
{
	int i,j,t;
	for(i=0;i<l-1;i++)
	   for(j=0;j<l-i-1;j++)
	      if(b[j]>b[j+1])
		  {
		      t=b[j];
			  b[j]=b[j+1];
		      b[j+1]=t;
		  }
	return 0;
}
void __fastcall TAutoForm::check(int *a)
{
	int i,j,m,n,k;
	int c[26]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
	m=a[0];
	c[m]=0;
	for(i=1;i<lchrom;i++)
	{
		for(j=0;j<i;j++)
		{	
			if (a[i]==a[j])
			{
				do
				{
				    n=1+Random(25);
					a[i]=c[n];
				}while (c[n]==0);
				c[n]=0;
			}
			else
			{
				k=a[i];
				c[k]=0;
			}
		}
	}
}

void __fastcall TAutoForm::initialize()
{
	//initdata();
        /*chromize[0]=3;
        chromize[1]=2;
        chromize[2]=2;
        chromize[3]=1;
        priority[0]=3;
        priority[1]=2;
        priority[2]=2;
        priority[3]=1; */
        lchrom=length(chromize);
	initpop();
	statics(oldpop);
	//initreport();
}

void __fastcall TAutoForm::pause()
{
    int i,j,k;
	for(i=0;i<10000;i++)
		for(j=0;j<10000;j++)
			for(k=0;k<10;k++);
}

__fastcall TAutoForm::Random(unsigned long n)
{
	randSeed=multiplier*randSeed+adder;
    return (unsigned short)((randSeed>>16)%n);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产毛片精品国产一区二区三区| 成人午夜碰碰视频| 国产精品一区二区久久精品爱涩| 国内成+人亚洲+欧美+综合在线| www.日韩精品| 日韩精品一区在线观看| 亚洲精品乱码久久久久久 | 884aa四虎影成人精品一区| 欧美高清在线视频| 久久99国产精品麻豆| 欧美系列日韩一区| 一区视频在线播放| 成人性生交大片免费看中文 | 国产精品久久久久久久久动漫 | 高清av一区二区| 337p日本欧洲亚洲大胆精品 | 亚洲精品高清在线| 国产·精品毛片| 精品国产一区二区三区忘忧草 | 日韩三级视频在线看| 亚洲精品中文字幕在线观看| 国产一区二区成人久久免费影院| 欧美日本在线观看| 亚洲一区二区av在线| 成人深夜福利app| 中文一区二区完整视频在线观看 | 成人久久视频在线观看| 精品久久久久av影院| 免费在线观看一区二区三区| 欧美日本免费一区二区三区| 亚洲成人在线观看视频| 欧美视频一区在线| 亚洲综合精品自拍| 欧美日韩视频在线观看一区二区三区| 亚洲精品成人天堂一二三| 99免费精品在线观看| 最新日韩av在线| 日本高清免费不卡视频| 亚洲影视在线播放| 欧美日韩高清在线播放| 亚洲成人午夜影院| 日韩午夜激情视频| 国产一区二区三区免费在线观看| 精品久久久久一区| 国产一区二区三区蝌蚪| 国产欧美日韩另类一区| 成人精品一区二区三区四区| 国产精品久久久久永久免费观看| 一本色道久久加勒比精品| 夜夜嗨av一区二区三区四季av| 日本电影亚洲天堂一区| 午夜av一区二区三区| 日韩欧美亚洲一区二区| 国产凹凸在线观看一区二区 | 国产日韩精品一区| av不卡在线播放| 亚洲成人资源在线| 久久精品视频在线看| 91一区二区在线观看| 三级欧美在线一区| 国产日韩欧美在线一区| 日韩精品一区二区三区视频 | 欧美一区二区三区性视频| 久久国产欧美日韩精品| 国产精品久久一卡二卡| 欧美日韩电影在线播放| 国产91精品精华液一区二区三区| 一区二区三区在线视频播放| 日韩欧美在线1卡| 91蜜桃传媒精品久久久一区二区| 午夜精品福利一区二区三区av| 欧美精品一区二区三区高清aⅴ| av在线不卡网| 麻豆精品国产91久久久久久| 中文字幕日韩一区| 精品国产不卡一区二区三区| 色综合久久九月婷婷色综合| 久久精品免费看| 亚洲免费观看高清完整版在线| 欧美吻胸吃奶大尺度电影| 国产伦精品一区二区三区在线观看| 136国产福利精品导航| 精品电影一区二区三区| 日本电影欧美片| 大陆成人av片| 久久99国产精品免费| 亚洲国产成人av好男人在线观看| 亚洲国产成人在线| 精品三级在线看| 欧美日韩精品免费观看视频 | 亚洲欧洲av在线| 精品久久久久久久久久久院品网| 在线视频中文字幕一区二区| 国产在线一区二区综合免费视频| 一区二区三区精品在线| 国产精品午夜免费| 精品第一国产综合精品aⅴ| 欧美揉bbbbb揉bbbbb| av网站免费线看精品| 国产精品996| 国产麻豆一精品一av一免费| 看电视剧不卡顿的网站| 视频一区中文字幕| 亚洲地区一二三色| 亚洲成a人v欧美综合天堂| 亚洲日本丝袜连裤袜办公室| 国产精品伦一区| 国产亚洲人成网站| 久久综合九色综合97婷婷 | 久久电影网站中文字幕| 午夜精品在线看| 亚洲自拍偷拍综合| 亚洲制服丝袜av| 亚洲综合精品久久| 亚洲亚洲人成综合网络| 一区二区视频在线| 亚洲黄一区二区三区| 亚洲在线中文字幕| 亚洲午夜免费视频| 天天av天天翘天天综合网色鬼国产| 一区二区三区日韩欧美| 一区二区三区中文字幕电影 | 日韩av电影免费观看高清完整版 | 色女孩综合影院| 色综合天天视频在线观看| 91亚洲男人天堂| 91成人在线精品| 欧美三级在线视频| 7777精品伊人久久久大香线蕉完整版 | 国产成人午夜99999| 国产精品一区在线观看你懂的| 国产成人av电影| 91在线免费视频观看| 91啦中文在线观看| 在线观看av一区二区| 欧美精品久久一区| 337p日本欧洲亚洲大胆精品| 中文字幕精品综合| 亚洲一区二区三区免费视频| 日韩**一区毛片| 国产剧情在线观看一区二区| 国产91丝袜在线播放| 色94色欧美sute亚洲线路一久| 欧美三级日韩三级| 精品国产人成亚洲区| 日本一区二区动态图| 亚洲黄色免费网站| 久久精品国产精品亚洲综合| 国产高清亚洲一区| 日本韩国精品在线| 久久日一线二线三线suv| 国产精品拍天天在线| 午夜精品久久久久久久蜜桃app| 捆绑紧缚一区二区三区视频| 成人激情午夜影院| 在线成人av网站| 亚洲国产高清在线观看视频| 亚洲一区二区三区视频在线播放| 麻豆精品一区二区三区| av一区二区三区在线| 欧美久久婷婷综合色| 欧美韩国日本一区| 秋霞电影网一区二区| 91亚洲精品一区二区乱码| 日韩欧美国产一二三区| 亚洲啪啪综合av一区二区三区| 免费高清视频精品| 色一情一乱一乱一91av| 日韩美一区二区三区| 一区二区三区91| 国产电影一区二区三区| 91精品欧美久久久久久动漫 | 国产日韩欧美亚洲| 日韩在线观看一区二区| 波多野结衣中文字幕一区二区三区 | 欧美国产一区在线| 久久99精品久久久| 欧美日韩中文一区| 国产精品短视频| 国产精品1024| 精品理论电影在线观看 | 亚洲天堂福利av| 国产精品一卡二卡在线观看| 亚洲精品免费在线| 91丝袜美女网| 国产精品亲子乱子伦xxxx裸| 国产伦精品一区二区三区在线观看| 欧美日韩免费在线视频| 悠悠色在线精品| 一本久久a久久免费精品不卡| 亚洲精品一区二区三区四区高清| 亚洲成人av一区| 欧美丝袜自拍制服另类| 亚洲手机成人高清视频| 成人福利视频网站| 久久精品日韩一区二区三区| 九九热在线视频观看这里只有精品| 欧美日韩国产电影| 日韩精品成人一区二区在线| 欧美日韩另类一区|