📄 1.cpp
字号:
#include <iostream>
#include <time.h>
#include<math.h>
#include<windows.h>
#include<stdlib.h>
using namespace std;
//////////////////////////////////////
const int N=20;//种群数目
const int M=20;// 服务台数
int g[N][M];//种群
int g0[N][M];//临时种群
int d[N];//统计
//const double Pc=0.25;//交叉率
//const double Pm=0.01;//变异率
//**********************************
const int x=30;//等待时间浮动
const int y=2;//等待顾客浮动
const int Nm=10;//最少开放服务台
const int Wm=300;//最长等待时间
const int Lm=10;//最大等待顾客数
/////////////////////////////////////////////
class Random
{
private:
int a[N];
public:
void get()
{
int i=0;
srand((unsigned)time(NULL));
a[0]=100*rand()/RAND_MAX;
do
{
int ii=0;
int b=100*rand()/RAND_MAX;
for(int j=0;j<=i;j++)
{if(b!=a[j])ii++;}
if(ii>=(i+1))
{
a[i+1]=b;
i=i+1;
}
}while(i<=M-1);
}
int set(int i)
{
return a[i];
}
};
void produce()
{
int i;
Random c[N];
for(int j=0;j<N;j++)
{
d[j]=0;
}
for(j=0;j<N;j++)
{
Sleep(2000);
c[j].get();
for(i=0;i<M;i++)
{
int b=c[j].set(i);
g[j][i]=fmod(b,2);
if(g[j][i]>0)
{
d[j]=d[j]+1;
}
cout<<g[j][i]<<" ";
}
cout<<endl;
}
for(j=0;j<N;j++)
{
cout<<d[j]<<endl;
}
}
int average()
{
int count=0;
for(int j=0;j<N;j++)
{
count=count+d[j];
}
count=count/N;
return count;
}
int copy(int Wc,int Lc,int S)//返回复制个数
{
//性能评价指标Wc,Lc,S(平均服务台数);
const int n=2;
int k=0;//复制个数
int num1=0;
if(Wc>Wm+x||Lc>Lm+y)
{
for(int i=0;i<N;i++)
{
if(d[i]>S)//平均服务台数
{
for(int j=0;j<M;j++)
{
g0[k][j]=g[i][j];
}
k=k+1;
}
}
}
else
if(Wc<Wm-x||Lc<Lm-y)
{
for(int i=0;i<N;i++)
{
if(d[i]<S)//平均服务台数
{
for(int j=0;j<M;j++)
{
g0[k][j]=g[i][j];
}
k=k+1;
}
}
}
else
{
for(int i=0;i<N;i++)
{
if(d[i]>=S-n&&d[i]<=S+n)//平均服务台数
{
for(int j=0;j<M;j++)
{
g0[k][j]=g[i][j];
}
k=k+1;
}
}
}
for(int i=0;i<N;i++)
{
for(int j=0;j<M;j++)
{cout<<g0[i][j]<<" ";}
cout<<endl;
}
return k;
}
int cross(int num,int S)// 性能指标 复制个数
{
int k=num;
int n=2;
int p1,p2;
int n1,n2;
int c1=0;
int c2=0;
int i,j,l;
for(i=0;i<M;i++)
{
d[i]=0;
}
for( i=0;i<N-num;i++)
{
srand((unsigned)time(NULL));
do
{
c1=rand()%20;
c2=rand()%20;
}while(c2<c1);
cout<<c1<<" "<<c2<<endl;
Sleep(1000);
srand((unsigned)time(NULL));
do
{
p1=rand()%20;
p2=rand()%20;
}while(p2<p1);
cout<<p1<<" "<<p2<<endl;
for( l=p1;l<=p2;l++)
{
int temp=g[c1][l];
g[c1][l]=g[c2][l];
g[c2][l]=temp;
}
for( j=0;j<M;j++)
{
if(g0[c1][j]>0)
{
n1=n1+1;
}
}
for( j=0;j<M;j++)
{
if(g0[c2][j]>0)
{
n2=n2+1;
}
}
if(n2>n1)
{
for(j=0;j<M;j++)
{
g0[k][j]=g[c2][j];
}
}
else
{
for(j=0;j<M;j++)
{
g0[k][j]=g[c1][j];
}
}
k=k+1;
Sleep(1000);
}
for( i=0;i<N;i++)
{
for( j=0;j<M;j++)
{
if(g0[i][j]>0)
{
d[i]=d[i]+1;
}
}
}
for( i=0;i<N;i++)
{
for( j=0;j<M;j++)
{
cout<<g0[i][j]<<" ";
}
cout<<d[i]<<endl;
}
return k;
}
int bianyi(int Wc,int Lc,int num,int S)
{
int c;
int i,j;
for(i=0;i<M;i++)
{
d[i]=0;
}
if(Wc>Wm+x||Lc>Lm+y)
{
for(i=num;i<N;i++)
{
srand((unsigned)time(NULL));
do
{
c=rand()%20;
}while(g0[i][c]==1);
cout<<c<<endl;
Sleep(1000);
g0[i][c]=1;
}
}
else if(Wc<Wm-x||Lc<Lm-y)
{
for(i=num;i<N;i++)
{
srand((unsigned)time(NULL));
do
{
c=rand()%20;
}while(g0[i][c]==0);
cout<<c<<endl;
Sleep(1000);
g0[i][c]=0;
}
}
for( i=0;i<N;i++)
{
for( j=0;j<M;j++)
{
if(g0[i][j]>0)
{
d[i]=d[i]+1;
}
}
}
for( i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
cout<<g0[i][j]<<" ";
}
cout<<d[i]<<endl;
}
return 0;
}
////////////////////////////////////////////
////////////////////////////////////////////
int main()
{
produce();
cout<<average()<<endl;
int sa=average();
int Wa=200;
int La=8;
int num=copy(Wa,La,sa);
cout<<num;
int qw=cross(num,sa);
cout<<qw;
int w=bianyi(Wa,La,num,sa);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -