Capacitated Facility Location Problem - 带容量工厂选址问题

题目描述

Suppose there are n facilities and m customers. We wish to choose:

  1. which of the n facilities to open
  2. the assignment of customers to facilities

The objective is to minimize the sum of the opening cost
and the assignment cost.

The total demand assigned to a facility must not exceed
its capacity.


数据格式

|J| |I|
s_1 f_1
s_2 f_2
  ...
s_|J| f_|J|
d_1 d_2 d_3 … d_|I|
c_{11} c_{12} c_{13} … c_{1|I|} 
c_{21} c_{22} c_{23} … c_{2|I|} 
   ...    ...    ...   ....
c_{|J|1} c_{|J|2} c_{|J|3} … c_{|J||I|} 

where:

|J| is the number of potential facility locations;
|I| is the number of customers;
s_j (j=1,...,|J|) is the capacity of facility j;
f_j (j=1,...,|J|) is the fixed cost of opening facility j;
d_i (i=1,...,|I|) is the demand of customer i;
c_{ji} (j=1,...,|J|), (i=1,...,|I|) is the cost of allocating all the demand of customer i to facility j.

优化问题

写成如下优化问题

  • min       ∑ 0 < = j < = ∣ J ∣ i s o p e n fj \sum_{0<=j<=|J|}^{isopen}\text{fj} 0<=j<=Jisopenfj + ∑ j , i i a s s i g n t o j cj,i \sum_{j,i}^{iassigntoj}\text{cj,i} j,iiassigntojcj,i

  • s.t         ∑ i a s s i g n t o j di \sum_{i}^{assigntoj}\text{di} iassigntojdi ≤ s j \leq s_j sj  ,   ∀ j ∈ J \forall j \in J jJ


DFS求解

遇到超出容量的情况,剪枝
遇到大于最小值的情况,剪枝

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

int J, I;
int *d, *s, *f;
int **c;

int sum;
bool *isopen;
int *capacities;
int *gene;

long min_v;
int *min_gene;

void read_data(ifstream &data) {
		data >> J >> I;
		cout << J << " " << I << endl;

		s = new int[J];
		f = new int[J];

		for (int i = 0; i < J; i ++) {
			data >> s[i] >> f[i];
			cout << s[i] << " " << f[i] << endl;
		}

		d = new int[I];
		float tmp;
		for (int i = 0; i < I; i ++) {
			data >> tmp;
			d[i] = tmp;
			cout << d[i] << " ";
		}
		cout << endl;

		c = new int*[J];
		for (int i = 0; i < J; i ++) c[i] = new int[I];

		for (int i = 0; i < J; i ++) {
			for (int j = 0; j < I; j ++) {
				data >> tmp;
				c[i][j] = tmp;
				cout << c[i][j] << " ";
			}
			cout << endl;
		}

		data.close();
		cout << "Finish Reading Data" << endl;
}

void delete_arr() {
	delete[] s;
	delete[] d;
	delete[] f;
	for (int i = 0; i < J; i ++) delete[] c[i];
	delete[] c;
}

void dfs(int index) {

	if (index == I) {
		for (int i=0; i<I; i++) cout << gene[i] << " ";
		cout << " costs " << sum << endl;
		min_v = sum;
		memcpy(min_gene, gene, I*sizeof(int));
		return;
	}

	for(int i = 0; i < J; i ++) {
		if (capacities[i] + d[index] > s[i]) continue;

		bool flag = true;
		if (isopen[i]) flag = false;
		else {
			if (sum + f[i] > min_v) continue;
			isopen[i] = true;
			sum += f[i];
		}

		if (sum + c[i][index] > min_v) {
			if (flag) {
				isopen[i] = false;
				sum -= f[i];
			}
			continue;
		}

		sum += c[i][index];

		capacities[i] += d[index];

		gene[index] = i;
		dfs(index+1);

		capacities[i] -= d[index];

		sum -= c[i][index];

		if (flag) {
			isopen[i] = false;
			sum -= f[i];
		}
	}
}

void process(int file_index) {
	ifstream data("Instances/p"+to_string(file_index));
	if (data.is_open()) {
		cout << "p" << file_index << endl;
		read_data(data);

		clock_t start = clock();

		sum = 0;
		capacities = new int[J];
		memset(capacities,0,J*sizeof(int));
		isopen = new bool[J];
		memset(isopen,false,J*sizeof(bool));
		min_v = 10000000;
		min_gene = new int[I];
		gene = new int[I];
		dfs(0);

		clock_t end = clock();
		cout << "Cost time " << (end-start)/CLOCKS_PER_SEC << "s, Best individual values for p" << file_index << " : " << endl
			<< min_v << endl;

		memset(isopen,false,I*sizeof(bool));
		for (int i = 0; i < I; i ++) isopen[ min_gene[i] ] = true;
		for (int i = 0; i < J; i ++) cout << isopen[i] << " ";
		cout << endl;
		
		for (int i = 0; i < I; i ++) cout << min_gene[i] << " ";
		cout << endl << endl;

		delete[] gene;
		delete[] capacities;
		delete[] isopen;
		delete[] min_gene;
		delete_arr();
	}
}

int main() {
	for (int i = 1; i <= 71; i ++) process(i);
}

GA求解

GA为群体搜索,不单单只保留最优解

Created with Raphaël 2.2.0 初始化 估值 选择 交叉、变异、进化 替换 终止 结束 yes no
  • 编码:长度为|I|,保存当前顾客对应的工厂
  • 选择:规模为k的锦标赛选择
  • 交叉:单点交叉,长度为|I|/2
  • 变异:单点变异
  • 进化:修复不合法基因,并以贪心的方式改良基因
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

int J, I;
int *d, *s, *f;
int **c;

int min_v;
int *min_gene;

ofstream result("result.txt");
ofstream genestxt("genes.txt");

//修复基因、贪心进化、估值
int fixup_greedy_value(int *gene) {

	map<int, int> capacities; //工厂的容量
	bool isopen[J] = {false}; //工厂的开关
	int sum = 0; //估值

	for (int j = 0; j < I; j ++)
		if (isopen[ gene[j] ]) capacities[ gene[j] ] += d[j];
		else {
			isopen[ gene[j] ] = true;
			capacities[ gene[j] ] = d[j];
		}
	//随机函数所用数组和计数器
	bool isranI[I] = {false}, isranJ[J] = {false};
	int countj = 0, counti;

	while (countj < J) {
		int j = rand()%J;
		if (isranJ[j]) continue;
		isranJ[j] = true;
		countj ++;

		if (isopen[j]) {

			//修复
			while (capacities[j] > s[j]) {
				int r = rand()%I;
				if (gene[r] == j) {
					int r2 = rand()%J;
					if (isopen[r2] && capacities[r2] + d[r] <= s[r2]) {
						capacities[r2] += d[r];
						capacities[j] -= d[r];
						gene[r] = r2;
					}
				}
			}

			//贪心
			counti = 0;
			memset(isranI,false,I*sizeof(bool));
			while (counti < I) {
				int i = rand()%I;
				if (isranI[i]) continue;
				isranI[i] = true;
				counti++;
				if (capacities[j]+d[i] <= s[j] && c[j][i] < c[ gene[i] ][i]) {
					capacities[ gene[i] ] -= d[i];
					capacities[j] += d[i];
					gene[i] = j;
				}
			}
					
		}
	}

	memset(isopen,false,J*sizeof(bool));
	for (int j = 0; j < I; j ++) isopen[gene[j]] = true;

	//估值
	for (int j = 0; j < I; j ++) sum += c[ gene[j] ][j];
	for (int j = 0; j < J; j ++) if (isopen[j]) sum += f[j];

	if (sum < min_v) {
		min_v = sum;
		memcpy(min_gene, gene, I*sizeof(int));
	}

	// cout << "cost for gene ";
	// for (int j = 0; j < I; j ++) cout << gene[j] << " ";
	// cout << "is " << sum << endl;

	return sum;
}

void process(int file_index) {
	ifstream data("Instances/p"+to_string(file_index));
	if (data.is_open()) {
		
		data >> J >> I;
		//cout << J << " " << I << endl;

		s = new int[J];
		f = new int[J];

		for (int i = 0; i < J; i ++) {
			data >> s[i] >> f[i];
			//cout << s[i] << " " << f[i] << endl;
		}

		d = new int[I];
		float tmp;
		for (int i = 0; i < I; i ++) {
			data >> tmp;
			d[i] = tmp;
			//cout << d[i] << " ";
		}
		//cout << endl;

		c = new int*[J];
		for (int i = 0; i < J; i ++) c[i] = new int[I];

		for (int i = 0; i < J; i ++) {
			for (int j = 0; j < I; j ++) {
				data >> tmp;
				c[i][j] = tmp;
				//cout << c[i][j] << " ";
			}
			//cout << endl;
		}

		data.close();
		//cout << "Finish Reading Data" << endl;
		
		clock_t start = clock();
		min_v = 10000000; //保存最优解
		min_gene = new int[I]; //保存最优基因

		vector<int*> genes; //种群,保存所有个体的基因
		srand((unsigned)time(NULL));

		vector<int> value; //某基因对应的估值
		long long total_val = 0; //所有估值的和

		for (int i = 0; i < I/5; i ++) { //种群大小固定为I/5
			int *gene = new int[I];
			for (int j = 0; j < I; j ++) gene[j] = rand() % J;
			genes.push_back(gene);

			value.push_back(fixup_greedy_value(genes[i]));
			total_val += value[i];

		}

		//cout << "Generated Initial Population" << endl;

		int k_size = genes.size()/5; //锦标赛的规模

		int count = 0; //当前Generation
		int father, mother; //父、母的序号
		bool selected[I]; //随机函数所用数组

		while (++count) {

			//cout << "Generation " << count++ << endl;
			
			//选择
			memset(selected,false,I*sizeof(bool));
			father = -1;
			for (int j = 0; j < k_size; j ++) {
				int ran = rand()%genes.size();

				if (!selected[ran]) {
					selected[ran] = true;
					if (father == -1) father = ran;
					else if (value[ran] < value[father]) father = ran;
				}
			}

			// cout << "father is " << father << ", gene is ";
			// for (int j = 0; j < I; j ++) cout << genes[father][j] << " ";
			// cout << "with value " << value[father] << endl;

			mother = -1;
			while (mother == -1) {
			memset(selected,false,I*sizeof(bool));
			for (int j = 0; j < k_size; j ++) {
				int ran = rand()%genes.size();

				if (!selected[ran]) {
					selected[ran] = true;

					//结束条件,若选到的基因相同并且代数大于10
					if (memcmp(genes[father],genes[ran],I*sizeof(int)) == 0) {
						if (count > 10) {
							clock_t end = clock();
							cout << "Result for p" << file_index << " is : "
								<< "Cost time " << 1000.0*(end-start)/CLOCKS_PER_SEC
								<< "ms, Total generation is " << count << " : " << endl
								<< min_v << endl;

							result << "| p" << file_index << " | " << min_v << " | "
							 		<<  1000.0*(end-start)/CLOCKS_PER_SEC << " | "
							 		<< count << " |" << endl;
							genestxt << "* p" << file_index << endl << "```java" << endl
								<< min_v << endl;

							bool isopen[J] = {false};
							for (int i = 0; i < I; i ++) isopen[ min_gene[i] ] = true;
							for (int i = 0; i < J; i ++) cout << isopen[i] << " ";
							cout << endl;
							
							for (int i = 0; i < I; i ++) cout << min_gene[i] << " ";
							cout << endl << endl;

							for (int i = 0; i < J; i ++) genestxt << isopen[i] << " ";
							genestxt << endl;
							
							for (int i = 0; i < I; i ++) genestxt << min_gene[i] << " ";
							genestxt << endl << "```" << endl << endl;

							for (int i = 0; i < genes.size(); i ++) delete[] genes[i];

							delete[] f;
							delete[] d;
							delete[] s;

							for (int i = 0; i < J; i ++) delete[] c[i];
							delete[] c;
							
							delete[] min_gene;
							return;
						}
						continue;
					}

					if (mother == -1) mother = ran;
					else if (value[ran] < value[mother]) mother = ran;
				}
			}
			}

			// cout << "mother is " << mother << ", gene is ";
			// for (int j = 0; j < I; j ++) cout << genes[mother][j] << " ";
			// cout << "with value " << value[mother] << endl;

			int *off_gene1 = new int[I], *off_gene2 = new int[I];

			//交叉,单点交叉,长度为I/2
			int index = rand()%(I/2);
			for (int j = 0; j < index; j ++) {
				off_gene1[j] = genes[father][j];
				off_gene2[j] = genes[mother][j];
			}
			for (int j = index; j < index + I/2; j ++) {
				off_gene1[j] = genes[mother][j];
				off_gene2[j] = genes[father][j];
			}
			for (int j = index + I/2; j < I; j ++) {
				off_gene1[j] = genes[father][j];
				off_gene2[j] = genes[mother][j];
			}

			//变异,单点变异
			if (rand() % genes.size() == 0) off_gene1[rand()%I] = rand()%J;
			if (rand() % genes.size() == 1) off_gene2[rand()%I] = rand()%J;

			//替换
			delete[] genes[father];
			delete[] genes[mother];
			total_val -= value[father];
			total_val -= value[mother];

			genes[father] = off_gene1;
			genes[mother] = off_gene2;
			value[father] = fixup_greedy_value(off_gene1);
			value[mother] = fixup_greedy_value(off_gene2);
			total_val += value[father];
			total_val += value[mother];

			// 每代加入一个随机基因的个体
			// int *gene = new int[I];
			// for (int j = 0; j < I; j ++) gene[j] = rand() % J;

			// genes.push_back(gene);
			// long v = fixup_greedy_value(gene);
			// value.push_back(v);
			// total_val += v;

			// 删除一个高于均值的个体
			// while (true) {
			// 	int r = rand()%genes.size();

			// 	if (value[r] >= total_val/genes.size()) {
			// 		delete[] genes[r];
			// 		genes.erase(r+genes.begin());
			// 		total_val -= value[r];
			// 		value.erase(r+value.begin());
			// 		break;
			// 	}
			// }

		}

	}
}

int main() {
	if (!result) return 0;

	for (int i = 1; i <= 71; i ++) process(i);

	result.close();
	genestxt.close();
	return 0;
}

结果

程序多处采用随机数,下为某次结果

数据 结果 耗时ms 代数
p1 9322 6 13
p2 8008 5 13
p3 10008 0 13
p4 12008 6 13
p5 9396 18 20
p6 8082 6 20
p7 10082 15 20
p8 12082 0 20
p9 9040 0 11
p10 7726 0 11
p11 9726 15 11
p12 11726 16 11
p13 10883 15 14
p14 8516 15 12
p15 11510 16 18
p16 14811 16 13
p17 10716 16 12
p18 8593 15 12
p19 11993 16 12
p20 14807 16 11
p21 10689 16 13
p22 8521 15 14
p23 11921 0 14
p24 15290 16 14
p25 18268 78 11
p26 15467 78 13
p27 20467 81 13
p28 25491 78 11
p29 18684 94 14
p30 15849 93 14
p31 21049 94 14
p32 26249 78 14
p33 18446 125 23
p34 15389 78 14
p35 20389 88 14
p36 25389 110 14
p37 17529 110 19
p38 15089 109 21
p39 19889 94 18
p40 24689 63 13
p41 7100 20 12
p42 9654 27 20
p43 11309 26 12
p44 7281 1 12
p45 8996 16 11
p46 11103 31 17
p47 6526 15 17
p48 8288 31 16
p49 10681 31 16
p50 9873 31 30
p51 10972 16 12
p52 11031 16 13
p53 12849 31 11
p54 9573 16 13
p55 10497 32 17
p56 23882 157 18
p57 32882 169 16
p58 53882 125 11
p59 39121 125 11
p60 23558 156 14
p61 31886 125 11
p62 52558 132 12
p63 37406 119 12
p64 23587 140 11
p65 32287 140 12
p66 52587 140 12
p67 36476 133 11
p68 23882 125 11
p69 32276 161 15
p70 52560 140 11
p71 38240 125 11

输出

  • p1
9322
1 1 1 1 1 1 1 1 1 1 
0 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 3 4 0 
  • p2
8008
1 1 1 1 1 1 1 1 1 1 
0 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 3 4 0 
  • p3
10008
1 1 1 1 1 1 1 1 1 1 
0 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 3 4 0 
  • p4
12008
1 1 1 1 1 1 1 1 1 1 
0 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 3 4 0 
  • p5
9396
1 1 1 1 1 1 1 1 1 1 
8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 7 0 0 2 1 8 1 5 7 0 4 0 4 3 
  • p6
8082
1 1 1 1 1 1 1 1 1 1 
8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 7 0 0 2 1 8 1 5 7 0 4 0 4 3 
  • p7
10082
1 1 1 1 1 1 1 1 1 1 
8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 7 0 0 2 1 8 1 5 7 0 4 0 4 3 
  • p8
12082
1 1 1 1 1 1 1 1 1 1 
8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 7 0 0 2 1 8 1 5 7 0 4 0 4 3 
  • p9
9040
1 1 1 1 1 1 1 1 1 1 
8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0 
  • p10
7726
1 1 1 1 1 1 1 1 1 1 
8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0 
  • p11
9726
1 1 1 1 1 1 1 1 1 1 
8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0 
  • p12
11726
1 1 1 1 1 1 1 1 1 1 
8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0 
  • p13
10883
1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 
16 1 10 10 1 15 17 13 14 17 15 4 1 6 13 3 15 10 4 9 14 15 15 19 6 17 16 17 1 17 13 7 13 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 
  • p14
8516
1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 
16 1 10 10 1 15 17 13 14 17 15 4 1 6 13 3 15 10 4 9 14 15 15 19 6 17 16 17 1 17 13 7 13 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9 
  • p15
11510
1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 1 
16 12 10 10 1 12 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 15 13 16 3 10 11 19 19 13 6 0 5 0 11 5 14 10 19 9 
  • p16
14811
1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 1 1 0 1 
16 12 10 10 1 12 17 13 12 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 0 0 11 13 12 10 19 9 
  • p17
10716
1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 0 1 
16 12 10 10 1 12 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 15 2 16 3 10 3 19 19 13 6 0 5 0 8 5 14 10 19 9 
  • p18
8593
1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 0 1 
16 12 10 10 1 12 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 15 2 16 3 10 3 19 19 13 6 0 5 0 8 5 14 10 19 9 
  • p19
11993
1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 0 1 
16 12 10 10 1 12 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 15 2 16 3 10 3 19 19 13 6 0 5 0 8 5 14 10 19 9 
  • p20
14807
1 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 1 0 1 
16 12 10 10 1 12 17 13 12 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 3 19 19 13 6 0 5 0 3 5 12 10 19 9 
  • p21
10689
1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 
16 12 10 10 1 12 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 13 16 3 10 3 19 19 13 6 0 5 0 8 5 14 10 19 9 
  • p22
8521
1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 
16 12 10 10 1 12 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 13 16 3 10 3 19 19 13 6 0 5 0 8 5 14 10 19 9 
  • p23
11921
1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 
16 12 10 10 1 12 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 13 16 3 10 3 19 19 13 6 0 5 0 8 5 14 10 19 9 
  • p24
15290
1 1 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 1 
0 1 10 10 1 15 1 13 12 4 15 4 1 6 13 3 15 10 17 9 1 15 5 19 9 17 0 3 1 4 13 7 13 0 3 10 8 19 19 13 10 0 5 0 8 5 7 10 19 9 
  • p25
18268
1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 1 
20 11 13 2 20 5 2 9 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 24 0 14 0 14 24 8 24 14 4 13 27 8 29 14 14 5 13 20 17 27 11 14 0 5 20 11 11 11 9 0 22 22 20 6 11 17 24 8 26 20 14 24 20 7 20 0 19 17 17 7 20 5 2 24 17 11 17 9 2 19 25 16 8 17 14 25 2 29 7 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 16 0 5 9 0 25 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5 
  • p26
15467
1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 
20 11 13 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 8 24 14 7 13 27 8 29 14 14 5 20 20 17 27 0 14 0 5 20 11 11 11 24 0 9 24 20 6 11 17 24 8 26 20 14 24 20 7 20 0 19 17 17 7 20 5 2 24 17 11 17 9 2 19 25 16 8 7 17 25 2 29 7 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5 
  • p27
20467
1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 
20 11 13 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 8 24 14 7 13 27 8 29 14 14 5 20 20 17 27 0 14 0 5 20 11 11 11 24 0 9 24 20 6 11 17 24 8 26 20 14 24 20 7 20 0 19 17 17 7 20 5 2 24 17 11 17 9 2 19 25 16 8 7 17 25 2 29 7 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5 
  • p28
25491
1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 
20 11 20 2 20 5 2 9 14 17 9 16 8 20 3 14 14 0 5 11 2 0 5 3 5 8 19 24 5 24 5 25 20 25 20 20 24 15 23 14 0 14 15 8 24 14 4 13 27 8 29 14 14 5 13 20 17 27 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 0 24 8 26 20 14 24 20 7 13 17 19 17 17 4 20 5 2 24 17 11 17 24 14 2 25 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 25 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5 
  • p29
18684
1 1 1 0 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 
20 11 20 2 20 5 2 24 14 17 22 16 8 20 19 14 14 17 5 11 2 0 5 17 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 28 24 14 4 13 27 8 29 14 14 5 13 20 17 27 11 14 0 5 20 11 11 11 9 0 24 9 20 6 11 17 24 8 26 20 14 24 20 7 13 17 19 17 17 4 20 5 2 24 17 11 17 9 2 2 25 16 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 21 24 24 24 24 5 8 25 13 18 0 5 9 0 21 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 11 2 5 
  • p30
15849
1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 
20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 8 24 14 7 13 27 8 29 14 14 5 13 20 17 27 0 14 0 5 20 11 11 11 9 0 22 9 20 6 11 17 24 8 26 20 14 24 20 7 13 17 17 17 17 7 20 5 2 24 17 11 17 5 2 19 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 16 0 5 9 0 29 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 11 2 5 
  • p31
21049
1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 
20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 8 24 14 7 13 27 8 29 14 14 5 13 20 17 27 0 14 0 5 20 11 11 11 9 0 22 9 20 6 11 17 24 8 26 20 14 24 20 7 13 17 17 17 17 7 20 5 2 24 17 11 17 5 2 19 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 16 0 5 9 0 29 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 11 2 5 
  • p32
26249
1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 
20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 8 24 14 7 13 27 8 29 14 14 5 13 20 17 27 0 14 0 5 20 11 11 11 9 0 22 9 20 6 11 17 24 8 26 20 14 24 20 7 13 17 17 17 17 7 20 5 2 24 17 11 17 5 2 19 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 16 0 5 9 0 29 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 11 2 5 
  • p33
18446
1 0 1 1 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 
20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 24 23 14 0 14 24 28 24 14 4 13 27 8 29 14 14 5 13 20 17 27 0 14 0 5 20 11 11 11 22 0 22 22 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 9 2 19 25 18 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 25 24 24 24 24 5 8 25 13 18 0 5 9 0 29 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5 
  • p34
15389
1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 1 1 1 1 1 
20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 8 24 14 4 13 27 8 29 14 14 5 20 20 17 27 0 14 0 5 20 11 11 11 9 0 22 22 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 4 20 5 2 24 17 11 17 9 2 3 25 16 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 25 24 24 24 24 5 8 25 13 16 0 5 24 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 
  • p35
20389
1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 1 1 1 1 1 
20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 8 24 14 4 13 27 8 29 14 14 5 20 20 17 27 0 14 0 5 20 11 11 11 9 0 22 22 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 4 20 5 2 24 17 11 17 9 2 3 25 16 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 25 24 24 24 24 5 8 25 13 16 0 5 24 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 
  • p36
25389
1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 1 1 1 1 1 
20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 8 24 14 4 13 27 8 29 14 14 5 20 20 17 27 0 14 0 5 20 11 11 11 9 0 22 22 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 4 20 5 2 24 17 11 17 9 2 3 25 16 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 25 24 24 24 24 5 8 25 13 16 0 5 24 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 
  • p37
17529
1 0 1 1 1 1 1 1 1 0 0 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 
20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 28 24 14 4 13 27 8 29 14 14 5 13 20 17 27 11 14 0 5 20 11 11 11 22 0 22 22 20 6 11 17 24 8 26 20 14 24 20 7 13 17 19 17 17 4 20 5 2 24 17 11 17 5 2 19 21 16 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 21 24 24 24 24 5 8 25 13 16 0 5 24 0 21 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5 
  • p38
15089
1 0 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 
20 11 13 2 20 5 2 9 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 28 24 14 0 13 27 8 29 14 14 5 20 20 17 27 0 14 0 5 20 11 11 11 9 0 24 9 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 9 2 3 25 16 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 21 24 24 24 24 5 8 25 13 16 0 5 9 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 
  • p39
19889
1 0 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 
20 11 13 2 20 5 2 9 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 28 24 14 0 13 27 8 29 14 14 5 20 20 17 27 0 14 0 5 20 11 11 11 9 0 24 9 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 9 2 3 25 16 8 17 17 25 2 29 17 11 14 28 14 14 2 11 11 21 24 24 24 24 5 8 25 13 16 0 5 9 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 
  • p40
24689
1 1 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 
20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 28 24 14 0 13 27 8 29 14 14 5 20 20 17 27 11 14 0 5 20 11 11 11 22 0 24 22 20 6 11 17 24 8 26 20 14 24 20 7 13 17 19 17 17 7 20 5 2 24 17 11 17 5 2 3 25 16 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 21 24 24 24 24 5 8 25 13 16 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5 
  • p41
7100
1 1 1 1 1 1 1 1 1 1 
5 6 4 1 7 9 3 7 8 8 4 6 2 6 2 7 7 3 0 6 6 1 4 1 6 5 5 4 8 5 8 0 0 0 3 9 2 6 6 9 2 7 3 3 3 5 0 5 6 4 1 1 6 6 9 7 2 8 8 8 0 0 1 5 0 6 6 6 4 4 0 4 4 0 7 7 2 2 9 5 7 2 2 7 9 7 9 9 9 2 
  • p42
9654
1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 1 1 1 1 1 
12 18 3 9 19 18 16 3 17 17 9 18 6 10 6 0 0 2 5 10 5 9 9 12 12 12 4 16 17 4 7 19 6 18 14 19 6 0 0 7 1 12 2 16 9 5 18 19 0 15 16 17 7 3 2 5 2 5 5 5 12 12 4 3 3 4 0 15 19 6 10 18 19 19 19 18 18 19 19 19 
  • p43
11309
1 1 1 0 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 
18 21 15 24 25 22 26 21 27 29 24 23 13 9 18 11 8 15 12 7 25 26 22 20 17 13 29 6 29 4 5 2 2 13 0 22 7 12 21 11 4 12 27 23 5 25 26 17 17 11 21 0 9 18 6 6 21 20 2 29 5 27 1 29 27 29 1 27 1 29 
  • p44
7281
1 1 1 1 1 1 1 1 1 1 
4 4 4 4 4 4 4 4 0 6 0 0 0 0 0 0 1 8 1 7 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 5 1 1 2 8 7 5 9 9 7 6 5 5 8 8 7 7 9 5 5 5 9 3 0 6 6 8 1 0 4 7 9 7 7 8 6 6 5 8 7 9 7 9 9 9 6 5 7 5 
  • p45
8996
1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 
0 0 0 0 0 0 0 1 1 1 1 6 6 6 6 2 3 3 2 3 2 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 0 0 2 3 11 12 18 16 19 7 15 16 17 17 11 16 18 19 5 15 10 9 12 9 15 17 18 7 11 12 7 10 18 12 18 17 17 17 17 16 10 7 
  • p46
11103
1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 1 
10 0 10 10 10 0 10 15 1 1 1 1 1 22 1 2 2 3 2 3 2 4 4 5 6 6 5 7 7 8 7 8 9 9 10 2 3 24 24 22 29 12 21 22 24 26 18 27 16 18 29 27 27 22 25 26 16 18 18 24 19 15 29 18 26 27 26 27 15 12 
  • p47
6526
1 1 1 1 1 1 1 1 1 1 
0 2 0 0 1 0 0 0 0 2 1 0 1 1 2 1 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 7 7 6 7 6 2 7 7 7 7 7 7 8 8 6 8 8 8 8 8 9 0 9 9 9 0 9 9 
  • p48
8288
1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 
0 0 0 0 0 0 0 0 0 2 3 2 2 3 3 4 4 4 5 5 5 5 5 5 6 6 6 6 6 7 7 8 8 8 9 8 9 9 9 9 9 9 10 10 10 10 10 10 8 8 12 9 12 12 12 14 15 12 14 12 0 15 14 14 15 16 16 17 17 17 17 17 17 18 18 19 19 19 19 19 
  • p49
10681
1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 
0 1 1 2 1 2 2 2 3 5 3 5 5 6 6 6 7 7 7 7 7 7 9 10 8 11 10 12 12 12 13 13 13 15 15 15 16 16 17 16 17 16 18 18 18 18 18 18 21 18 21 18 0 22 22 22 22 24 24 26 25 26 25 26 27 27 27 29 29 29 
  • p50
9873
1 1 1 1 1 1 1 1 1 1 
3 6 3 6 2 9 5 5 3 7 7 4 1 9 0 9 9 5 5 3 6 6 0 4 0 0 8 4 4 7 7 7 3 3 3 5 9 1 0 6 0 9 9 2 5 5 5 5 5 3 3 5 6 4 0 0 9 6 2 2 9 7 7 7 3 3 0 4 8 7 3 0 6 0 0 4 4 3 3 4 3 5 2 9 2 2 6 7 2 7 9 9 1 2 1 9 9 1 1 1 
  • p51
10972
1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 
15 6 19 10 12 13 5 16 15 1 5 3 6 13 6 13 12 16 2 15 0 0 10 14 14 14 7 3 19 7 1 1 17 19 15 5 13 13 10 0 0 13 13 13 16 5 5 5 5 17 15 2 11 14 14 10 6 6 18 12 13 5 1 5 15 15 10 3 7 7 15 0 0 0 10 19 19 19 19 3 19 5 16 12 13 13 6 2 12 1 13 13 18 18 18 13 13 13 13 13 
  • p52
11031
1 1 1 1 1 1 1 1 1 1 
7 7 7 7 7 7 7 7 3 4 4 4 3 4 4 4 4 5 3 8 8 8 3 8 3 9 5 5 5 9 5 5 9 9 6 6 6 6 6 6 6 6 6 6 7 7 4 8 8 5 5 3 4 6 2 5 3 3 3 4 6 9 5 5 0 3 5 6 4 7 6 6 4 3 3 9 3 4 7 1 6 3 8 1 5 3 3 7 5 3 5 5 9 1 5 1 3 4 3 7 
  • p53
12849
0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 
5 5 5 5 5 5 5 5 19 19 19 7 7 7 7 7 7 12 12 13 12 13 13 12 3 15 9 9 9 15 15 9 15 9 18 18 18 18 18 18 18 18 18 18 5 5 7 13 13 9 15 4 7 18 5 15 3 3 1 6 18 2 15 13 3 13 9 18 10 5 17 18 6 3 3 15 3 6 6 8 14 19 12 15 15 3 1 6 15 4 2 8 17 17 15 17 1 6 1 16 
  • p54
9573
1 0 1 1 1 1 1 1 1 1 
9 7 7 7 7 7 7 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 6 6 8 6 6 8 8 8 8 8 8 8 3 6 6 6 6 6 6 6 6 6 5 5 6 5 5 5 6 6 0 0 6 0 5 7 0 0 0 0 0 4 0 0 4 4 4 4 4 4 4 4 9 4 9 9 9 4 4 9 9 
  • p55
10497
0 0 1 0 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 
17 18 16 18 16 4 4 4 4 4 2 2 2 2 2 2 2 2 2 12 12 12 12 12 6 12 12 6 6 6 6 14 14 6 6 6 6 6 6 7 19 19 19 7 7 19 19 7 19 7 7 14 7 7 7 7 7 7 7 7 11 11 9 11 11 11 11 7 11 13 9 11 9 11 17 13 9 13 9 9 13 15 15 15 15 15 15 15 15 15 15 18 18 18 18 17 18 18 18 18 
  • p56
23882
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 7 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p57
32882
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 7 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p58
53882
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 7 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p59
39121
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 7 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p60
23558
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 14 8 26 11 28 19 26 16 2 11 26 0 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 0 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p61
31886
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 7 29 0 7 8 13 11 5 14 28 12 18 12 19 9 23 23 20 23 8 16 10 0 9 7 29 13 6 5 27 7 28 6 7 11 2 3 11 6 0 28 28 15 12 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 14 8 26 11 28 19 26 16 2 11 26 0 28 24 11 20 23 9 3 3 28 10 12 22 11 11 11 5 24 15 27 7 24 0 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p62
52558
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 7 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 14 8 26 11 28 19 26 16 2 11 26 0 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 0 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p63
37406
1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 23 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 20 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 23 17 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 2 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 23 27 23 4 3 21 1 20 19 10 26 2 0 10 29 10 2 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p64
23587
1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 20 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 17 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 10 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p65
32287
1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 20 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 17 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 10 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p66
52587
1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 20 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 17 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 10 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p67
36476
1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 
18 19 21 22 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 20 24 15 18 9 6 4 9 19 13 21 19 14 24 16 24 16 20 6 18 9 18 25 29 0 7 20 13 12 5 14 28 25 7 12 19 9 23 23 20 23 20 16 10 0 9 25 29 13 19 5 27 7 28 6 25 25 2 3 27 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 20 28 7 17 20 9 25 17 19 9 16 2 12 19 17 28 24 25 20 23 9 3 3 28 10 12 22 28 25 25 5 24 15 27 25 24 17 23 0 20 28 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 4 2 0 10 29 10 5 21 2 19 12 9 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p68
23882
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p69
32276
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 14 8 26 11 28 19 26 16 2 11 26 0 11 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 0 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p70
52560
1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 13 28 18 3 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 7 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 5 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 
  • p71
38240
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 9 11 17 19 9 16 2 11 19 17 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 4 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 

其中GA中比较主要的部分是控制终止条件。

  • 最快的方式,是锦标赛选出的基因相同时,终止。
  • 最优的方式,是种群中一定数量的个体基因相同时,终止。
  • 还有,是达到一定代数后,终止
  • 或者,最小值长时间未改变。

其次,GA中种群大小、锦标赛规模均未经过测试。

你可能感兴趣的:(Capacitated Facility Location Problem - 带容量工厂选址问题)