⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 本算法使用了遗传算法的方法实现了随机数的生成方法。能够比较平均得实现随机数的生成。
💻 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 + -