算法设计期末项目: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.
(3)The objective is to minimize the sum of the opening cost and the assignment cost.
(4)The total demand assigned to a facility must not exceed its capacity.

建立模型

由于本题相较于一般的CFLP问题有一个限制:每个顾客的需求只能同时被一间工厂满足。因此本题可以不需要考虑一个顾客到两个或以上的工厂的情况。
记:
集合 I = { 1 , 2 , . . . , n } I = \{1,2,...,n\} I={1,2,...,n}为工厂集合
集合 J = { 1 , 2 , . . . , m } J = \{1,2,...,m\} J={1,2,...,m}为顾客集合
记号 F i F_{i} Fi 为第 i 个工厂的开启费用
记号 Y i Y_{i} Yi 代表第 i 个工厂是否启用, Y i = { 1 , o p e n 0 , c l o s e Y_{i} = \begin{cases} 1, open \\ 0, close \end{cases} Yi={1,open0,close
记号 W i W_{i} Wi 代表第 i 个工厂的容量
记号 C i j C_{ij} Cij 为第 j 个顾客到第 i 个工厂的花费
记号 X i j X_{ij} Xij 代表第 j 个顾客在第 i 个工厂的需求
记号 D j D_{j} Dj 代表第 j 个顾客的总需求
记号 Z Z Z 代表得到的最小总花费

求解此问题时需要考虑两个限制:
(1)最小花费是开工厂的总花费和顾客到工厂的总花费的总和
(2)对于每个工厂,其实际满足的顾客需求量必须小于等于其最大容量值
因此,我们可以得到下面的公式:
{ Z = min ⁡ ( ∑ i = 1 n F i Y i + ∑ j = 1 m ∑ i = 1 n C i j ) ∑ j = 1 m X i j ≤ W i Y i ,      ∀ i ∈ I ∑ i = 1 n X i j = D j ,      ∀ j ∈ J Y i ∈ { 0 , 1 } \begin{cases} Z = \min(\sum_{i=1}^n F_{i}Y_{i} + \sum_{j=1}^m\sum_{i=1}^nC_{ij})\\ \\ \sum_{j=1}^mX_{ij} \leq W_{i}Y_{i} ,\space\space\space\space \forall i \in I \\ \\ \sum_{i=1}^nX_{ij} = D_{j},\space\space\space\space \forall j \in J \\ \\ Y_{i} \in \{0,1\} \end{cases} Z=min(i=1nFiYi+j=1mi=1nCij)j=1mXijWiYi,    iIi=1nXij=Dj,    jJYi{0,1}

代码部分

GitHub仓库地址

算法1:贪心算法

由于顾客的人数远大于工厂的数量,因此我觉得考虑每个顾客的最小花费会得到更好的解
贪心算法总共分为两步:
(1)对每一个顾客到各个工厂的花费进行从小到大的排序
(2)从最小花费的工厂开始找,假如该工厂的剩余容量满足顾客的需求,那么将该顾客安排到此工厂;否则,继续查找
贪心算法有一个不好的地方就是,这样查找下去,基本上都会出现所有工厂全部开启的情况。因此,我这里做了一些改进,在第一次贪心算法得到的结果的基础上,强制关闭一些工厂,以得到更好的解。这里使用递归方式进行查找,分为三步:
(1)在当前工厂开启状态的基础上,关闭一个启用的工厂,对所有顾客进行重分配,重新计算最小花费
(2)遍历当前所有处于启用状态的工厂,重复步骤(1),找到能够得到更小花费的情况
(3)假如找到了更小花费的情况,那么取它们的最小值,关闭对应工厂,进入下一次递归迭代;否则,返回当前结果

class Greedy {
public:

    static int run(const Information& info){
        vector<bool> restrict_f(info.total_fac_count);
        for(int i = 0; i < info.total_fac_count; i++){
            restrict_f[i] = true;
        }
        State result = findR(info, restrict_f);
        // 显示
        showData::display(info, getStateCost(info, result), result.n_isOpen, result.n_cusToFac, "./result_Greedy.txt");
        return getStateCost(info, result);
    }

    static State findR(const Information& info, vector<bool>& restrict_f) {
        State res;
        State p = findResult(info, restrict_f);
        if(!p.isValid) {
            return p;
        }
        int c = getStateCost(info, p);
        int rC = c;
        int pos = -1;
        res = p;
        for(int i = 0; i < info.total_fac_count; i++) {
            if(restrict_f[i]) {
                restrict_f[i] = false;
                State temp = findResult(info, restrict_f);
                if(temp.isValid) {
                    int tC = getStateCost(info, temp);
                    if(rC > tC){
                        rC = tC;
                        res = temp;
                        pos = i;
                    }
                }
                restrict_f[i] = true;
            }
        }
        if(pos != -1){
            restrict_f[pos] = false;
            return findR(info, restrict_f);
        }
        else{
            return res;
        }
    }

    static State findResult(const Information& info, vector<bool> restrict_f) {
        vector<int> cusToFac(info.total_cus_count);
        vector<int> f_rest(info.total_fac_count);
        vector<int> isOpen(info.total_fac_count);
        int totalCost = 0;

        for(int i = 0; i < info.total_fac_count; i++) {
            f_rest[i] = info.fac_list[i].capacity;
        }

        for(int customer = 0; customer < info.total_cus_count; customer++) {
            /*找最近工厂*/
            vector<int> cost_list = info.cus_list[customer].costs;
            vector<int> rec;
            int actual_f_num = -1;
            sort(cost_list.begin(), cost_list.end());
            for(int c = 0; c < cost_list.size(); c++) {
                vector<int>::iterator ptr = find(rec.begin(), rec.end(), cost_list[c]);
                if(ptr == rec.end()) {
                    vector<int> temp_fac_list;
                    rec.push_back(cost_list[c]);

                    // 找到最近的工厂
                    for(int i = 0; i < info.cus_list[customer].costs.size(); i++) {
                        if(info.cus_list[customer].costs[i] == cost_list[c] && restrict_f[i]) {
                            temp_fac_list.push_back(i);
                        }
                    }
                    // 判断该工厂是否有空位
                    int f_num = -1, minFacCost = 1000000;
                    for(int i = 0; !temp_fac_list.empty() && i < temp_fac_list.size(); i++) {
                        int n = temp_fac_list[i];
                        if(f_rest[n] >= info.cus_list[customer].need && info.fac_list[n].cost < minFacCost) {
                            f_num = n;
                            minFacCost = info.fac_list[n].cost;
                        }
                    }
                    // 将顾客放入工厂
                    if(f_num != -1) {
                        actual_f_num = f_num;
                        break;
                    }
                }
            }
            if(actual_f_num == -1){
                return State(false);
            }
            else {
                if(isOpen[actual_f_num] == 0) {
                    isOpen[actual_f_num] = 1;
                }
                cusToFac[customer] = actual_f_num;
                f_rest[actual_f_num] -= info.cus_list[customer].need;
            }
        }

        State res(cusToFac, f_rest, isOpen);
        return res;
    }

    static int getStateCost(const Information& info, State& curState) {
        int totalCost = 0;
        for(int factory = 0; factory < info.total_fac_count; factory++) {
            totalCost += info.fac_list[factory].cost * curState.n_isOpen[factory];
        }
        for(int customer = 0; customer < info.total_cus_count; customer++) {
            totalCost += info.cus_list[customer].costs[curState.n_cusToFac[customer]];
        }
        return totalCost;
    }
};

算法2:模拟退火算法

模拟退火算法寻找邻域的方法:
(1)随机挑选一个顾客,将其放到一个满足其需求的新工厂
(2)随机挑选两个顾客,将他们所去的工厂对调,即由原来的(Ca,Fa)和(Cb,Fb)变为(Ca,Fb)和(Cb,Fa)
模拟退火算法实现起来比较简单,主要分成五步:
(1)将顾客随机安排到满足其需求的工厂
(2)设置初温和末温以及降温速率
(3)产生新解(两种寻找邻域的方法)
(4)假如得到的新解拥有较小的花费,那么选择新解;否则,按照一定的概率接收较差的解
(5)继续执行上述操作直到当前温度小于末温,获得最终解

class SA {
public:
    static int run(const Information& info){
        vector<int> cusToFac(info.total_cus_count);
        vector<int> f_rest(info.total_fac_count);
        vector<int> isOpen(info.total_fac_count);
        int totalCost = 0;

        for(int i = 0; i < info.total_fac_count; i++) {
            f_rest[i] = info.fac_list[i].capacity;
        }

        srand(time(NULL));

        for(int customer = 0; customer < info.total_cus_count; customer++){
            int f = rand() % info.total_fac_count;
            while(f_rest[f] < info.cus_list[customer].need){
                f = rand() % info.total_fac_count;
            }
            if(isOpen[f] == 0) {
                isOpen[f] = 1;
            }
            f_rest[f] -= info.cus_list[customer].need;
            cusToFac[customer] = f;
        }

        State InitialState(cusToFac, f_rest, isOpen), temp;
        temp = InitialState;

        double T = 100, end_T = 0.001, d = 0.99;
        int temp_cost = getTempCost(info, InitialState);

        while(T >= end_T) {
            int iteration = 0;
            while(iteration++ <= 1000) {
                State newState = getNewState(info, temp);
                double Ek = getTempCost(info, newState) - temp_cost;
                if( Ek < 0 ) {
                    temp = newState;
                    temp_cost = temp_cost + Ek;
                }
                else {
                    double p = exp(-Ek / T);
                    double R = rand() % 999 / 1000.0f;
                    if(R < p) {
                        temp = newState;
                        temp_cost = temp_cost + Ek;
                    }
                }
            }
            double t = rand() % 999 / 1000.0f;
            if(t > 0.9) {
                T *= (2-d);
            }
            else {
                T *= d;
            }
        }

        isOpen = temp.n_isOpen;
        cusToFac = temp.n_cusToFac;
        // 统计花费
        for(int factory = 0; factory < info.total_fac_count; factory++) {
            totalCost += info.fac_list[factory].cost * isOpen[factory];
        }
        for(int customer = 0; customer < info.total_cus_count; customer++) {
            totalCost += info.cus_list[customer].costs[cusToFac[customer]];
        }

        // 显示
        showData::display(info, totalCost, isOpen, cusToFac, "./result_SA.txt");
        return totalCost;
    }

    static State getNewState(const Information& info, const State& curState) {
        State newS_1 = trans1(info, curState);
        State newS_2 = trans2(info, newS_1);
        State newS_3 = trans1(info, newS_2);
        State newS_4 = trans1(info, newS_3);
        return newS_4;
    }

    static State trans1(const Information& info, const State& curState) {
        State newS = curState;
        int c1 = rand() % info.total_cus_count,
            f2 = rand() % info.total_fac_count;
        while(curState.n_cusToFac[c1] == f2 || curState.n_f_rest[f2] < info.cus_list[c1].need) {
            f2 = rand() % info.total_fac_count;
        }
        int f1 = curState.n_cusToFac[c1];
        newS.n_f_rest[f1] += info.cus_list[c1].need;
        newS.n_f_rest[f2] -= info.cus_list[c1].need;
        if(newS.n_isOpen[f2] == 0) {
            newS.n_isOpen[f2] = 1;
        }
        if(newS.n_f_rest[f1] == info.fac_list[f1].capacity){
            newS.n_isOpen[f1] = 0;
        }
        newS.n_cusToFac[c1] = f2;

        return newS;
    }

    static State trans2(const Information& info, const State& curState) {
        State newS = curState;
        int c1 = rand() % info.total_cus_count,
            c2 = rand() % info.total_cus_count;

        int f1 = curState.n_cusToFac[c1],
            f2 = curState.n_cusToFac[c2];
        while(c1 == c2 || curState.n_f_rest[f1] + info.cus_list[c1].need < info.cus_list[c2].need ||
              curState.n_f_rest[f2] + info.cus_list[c2].need < info.cus_list[c1].need) {
            c1 = rand() % info.total_cus_count;
            c2 = rand() % info.total_cus_count;
            f1 = curState.n_cusToFac[c1];
            f2 = curState.n_cusToFac[c2];
        }
        newS.n_f_rest[f1] += info.cus_list[c1].need - info.cus_list[c2].need;
        newS.n_f_rest[f2] += info.cus_list[c2].need - info.cus_list[c1].need;
        newS.n_cusToFac[c1] = f2;
        newS.n_cusToFac[c2] = f1;
        return newS;
    }

    static int getTempCost(const Information& info, State& curState) {
        int totalCost = 0;
        for(int factory = 0; factory < info.total_fac_count; factory++) {
            totalCost += info.fac_list[factory].cost * curState.n_isOpen[factory];
        }
        for(int customer = 0; customer < info.total_cus_count; customer++) {
            totalCost += info.cus_list[customer].costs[curState.n_cusToFac[customer]];
        }
        return totalCost;
    }
};

结果输出

注:工厂编号从0开始

(1)贪心算法
样例结果时间(s)
p191420.005
p281040.006
p398240.006
p4112610.007
p593480.004
p680610.003
p799050.004
p8117050.003
p985980.006
p1076170.005
p1190640.005
p12103010.007
p1385050.047
p1471690.043
p1588920.063
p16104920.046
p1785150.065
p1871520.08
p1989520.062
p20107070.124
p2181140.357
p2271200.222
p2387740.142
p24103740.17
p25122680.629
p26113800.508
p27133800.949
p28153800.884
p29142831.095
p30125111.074
p31151110.972
p32176470.684
p33124401.15
p34114250.592
p35134250.393
p36154250.362
p37117020.445
p38108880.469
p39125610.471
p40141610.497
p4168100.012
p4257810.106
p4359570.299
p4475850.003
p4564580.073
p4660650.228
p4766340.005
p4856130.067
p4956960.191
p5094540.01
p5178340.09
p5295880.01
p5389100.101
p5498310.01
p5580840.115
p56214290.841
p57270590.43
p58389750.476
p59287300.554
p60206050.46
p61249610.565
p62336900.663
p63253990.671
p64205300.473
p65244450.524
p66316690.603
p67250320.549
p68207350.509
p69248030.594
p70332030.559
p71262110.54
每个输入样例使用改进贪心算法的输出结果

p1

9142
1 1 1 1 1 1 0 0 1 1 
8 8 1 5 3 8 2 4 4 1 9 0 3 2 0 3 4 0 9 4 3 4 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 4 0 2 0 4 3 

p2

8104
1 1 1 1 1 1 1 0 1 1 
8 8 1 6 3 8 2 4 4 1 9 0 3 2 0 3 4 0 9 4 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 4 0 2 0 4 3 

p3

9824
1 1 1 1 1 1 1 0 1 0 
8 8 1 6 3 8 2 4 4 1 4 0 3 2 0 3 4 0 6 4 3 4 6 4 2 5 1 5 0 5 2 6 0 3 4 4 4 3 0 2 1 8 1 5 4 0 2 0 2 3 

p4

11261
1 1 1 1 1 0 1 0 1 0 
8 8 1 6 3 8 2 4 4 1 4 0 3 2 0 3 4 0 6 4 3 4 6 4 2 6 1 1 0 1 2 6 0 3 4 4 4 3 0 2 3 8 3 6 4 0 2 0 2 2 

p5

9348
1 1 1 1 1 1 0 1 1 1 
8 8 1 5 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 1 

p6

8061
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 2 0 7 1 

p7

9905
1 1 1 1 1 1 1 1 1 0 
8 8 1 6 3 8 2 4 4 1 4 8 3 2 8 3 4 0 6 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 4 4 7 3 0 4 1 8 1 5 7 0 2 0 7 1 

p8

11705
1 1 1 1 1 1 1 1 1 0 
8 8 1 6 3 8 2 4 4 1 4 8 3 2 8 3 4 0 6 7 3 8 6 4 2 5 1 5 0 5 2 6 0 3 4 4 7 3 0 4 1 8 1 5 7 0 2 0 7 1 

p9

8598
1 1 1 1 1 0 1 0 1 0 
8 8 1 6 3 8 2 4 4 1 4 8 3 2 8 3 4 0 6 4 3 8 6 4 2 6 1 1 0 1 2 6 0 3 4 4 4 3 0 4 1 8 1 6 4 0 2 0 2 0 

p10

7617
1 1 1 1 1 0 1 1 1 0 
8 8 1 6 3 8 2 4 4 1 4 8 3 2 8 3 4 0 6 7 3 8 6 4 2 6 1 1 0 1 2 6 0 3 4 4 4 3 0 4 1 8 1 6 7 0 4 0 4 0 

p11

9064
1 1 1 1 1 0 1 0 1 0 
8 8 1 6 3 8 2 4 4 1 4 8 3 2 8 3 4 0 6 4 3 8 6 4 2 6 1 1 0 1 2 6 0 3 4 4 4 3 0 4 1 8 1 6 4 0 2 0 2 0 

p12

10301
1 1 1 0 1 0 1 0 1 0 
8 8 1 6 1 8 2 4 4 1 4 8 0 2 8 0 4 0 6 4 1 8 6 4 2 6 1 1 0 1 2 6 0 0 4 4 4 0 0 4 1 8 1 6 4 0 2 0 2 8 

p13

8505
1 1 0 0 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 
0 12 10 10 1 12 17 13 12 17 15 19 1 6 13 12 15 10 17 6 12 15 15 19 6 17 0 17 1 17 13 15 13 0 1 10 8 19 19 13 6 0 15 0 8 13 12 10 19 8 

p14

7169
0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 1 1 1 0 1 
16 3 10 10 19 15 17 13 14 17 15 19 19 6 13 3 15 10 17 6 14 15 15 19 6 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 6 16 16 16 3 13 14 10 19 6 

p15

8892
0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 1 1 1 0 1 
16 3 10 10 19 15 17 13 3 17 15 19 19 6 13 3 15 10 17 6 15 15 15 19 6 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 6 16 16 16 3 13 10 10 19 6 

p16

10492
0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 1 1 1 0 1 
16 3 10 10 19 15 17 13 3 17 15 19 19 6 13 3 15 10 17 6 15 15 15 19 6 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 6 16 16 16 3 13 10 10 19 6 

p17

8515
1 1 0 0 0 0 1 0 1 0 1 0 0 1 1 1 0 1 0 1 
0 1 10 10 1 15 17 13 14 17 15 19 1 6 13 14 15 10 17 6 14 15 15 19 6 17 0 17 1 17 13 15 13 0 1 10 8 19 19 13 6 0 0 15 8 13 14 10 19 8 

p18

7152
0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 1 1 1 0 1 
16 3 10 10 19 15 17 13 14 17 15 19 19 6 13 3 15 10 17 6 14 15 15 19 6 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 6 16 15 16 3 13 14 10 19 6 

p19

8952
0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 1 1 1 0 1 
16 3 10 10 19 15 17 13 14 17 15 19 19 6 13 3 15 10 17 6 14 15 15 19 6 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 6 16 15 16 3 13 14 10 19 6 

p20

10707
0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 1 1 1 0 1 
16 3 10 10 19 15 17 13 3 17 15 19 19 6 13 3 15 10 17 6 15 15 15 19 6 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 6 16 16 10 3 13 10 6 19 6 

p21

8114
1 1 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0 1 0 0 
0 1 10 10 1 15 17 13 14 17 15 1 1 10 13 14 15 10 17 9 14 15 15 13 9 17 0 17 1 17 13 15 13 0 1 10 17 1 1 13 10 0 0 0 9 13 14 10 1 9 

p22

7120
0 0 0 1 0 0 0 0 0 1 1 0 0 1 1 1 1 1 0 1 
16 3 10 10 19 15 17 13 14 17 15 19 19 10 13 3 15 10 17 9 14 15 15 19 9 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 10 16 15 16 3 13 14 10 19 9 

p23

8774
0 0 0 1 0 0 0 0 0 1 1 0 0 1 0 1 1 1 0 1 
16 3 10 10 19 15 17 13 3 17 15 19 19 10 13 3 15 10 17 9 15 15 15 19 9 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 10 16 15 16 3 13 15 10 19 9 

p24

10374
0 0 0 1 0 0 0 0 0 1 1 0 0 1 0 1 1 1 0 1 
16 3 10 10 19 15 17 13 3 17 15 19 19 10 13 3 15 10 17 9 15 15 15 19 9 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 10 16 15 16 3 13 15 10 19 9 

p25

12268
1 0 1 0 0 1 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 
20 11 20 2 20 5 2 24 14 17 24 20 20 20 17 14 14 17 5 11 2 0 5 17 5 20 2 24 5 24 5 11 6 11 20 20 24 24 0 14 0 14 24 14 24 14 0 20 11 14 5 14 14 5 20 20 17 11 11 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 20 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 0 11 0 5 2 2 21 20 20 0 14 11 2 5 0 11 14 14 14 14 2 11 11 21 24 24 24 24 5 20 11 20 20 0 5 24 0 21 0 11 24 5 20 14 0 5 20 0 0 20 20 14 14 11 11 5 0 5 

p26

11380
1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 
20 11 20 2 20 5 2 24 14 17 24 16 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 11 20 11 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 0 11 0 5 2 2 11 16 8 0 14 11 2 5 0 11 14 8 14 14 2 11 11 11 24 24 24 24 5 8 11 20 16 0 5 24 0 5 0 11 24 5 8 14 0 5 20 0 0 8 20 14 8 11 11 5 0 24 

p27

13380
1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 
20 11 20 2 20 5 2 24 14 17 24 16 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 11 20 11 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 0 11 0 5 2 2 11 16 8 0 14 11 2 5 0 11 14 8 14 14 2 11 11 11 24 24 24 24 5 8 11 20 16 0 5 24 0 5 0 11 24 5 8 14 0 5 20 0 0 8 20 14 8 11 11 5 0 24 

p28

15380
1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 
20 11 20 2 20 5 2 24 14 17 24 16 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 11 20 11 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 0 11 0 5 2 2 11 16 8 0 14 11 2 5 0 11 14 8 14 14 2 11 11 11 24 24 24 24 5 8 11 20 16 0 5 24 0 5 0 11 24 5 8 14 0 5 20 0 0 8 20 14 8 11 11 5 0 24 

p29

14283
1 0 1 0 0 1 1 0 1 0 0 1 0 0 1 1 0 1 0 0 1 1 0 0 1 1 0 0 0 0 
20 11 20 2 20 5 2 24 14 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 11 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 24 20 14 24 20 0 8 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 21 8 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 21 24 24 5 5 5 8 25 8 8 0 25 15 0 21 0 11 24 21 8 14 0 25 8 0 0 8 14 2 2 25 25 11 2 11 

p30

12511
1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 1 1 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 13 2 20 5 2 24 14 17 24 16 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 13 25 20 20 24 15 0 14 0 14 15 8 24 14 0 13 11 8 5 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 13 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 16 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 5 5 5 8 25 13 16 0 25 15 0 25 0 11 24 25 8 14 0 25 20 0 0 8 20 2 8 25 25 11 2 11 

p31

15111
1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 1 1 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 13 2 20 5 2 24 14 17 24 16 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 13 25 20 20 24 15 0 14 0 14 15 8 24 14 0 13 11 8 5 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 13 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 16 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 5 5 5 8 25 13 16 0 25 15 0 25 0 11 24 25 8 14 0 25 20 0 0 8 20 2 8 25 25 11 2 11 

p32

17647
1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 1 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 13 2 20 5 2 24 14 17 24 16 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 13 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 5 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 13 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 16 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 5 5 5 11 5 8 25 13 16 0 25 25 0 25 0 11 11 25 8 14 0 25 20 0 0 8 20 2 8 25 25 11 2 0 

p33

12440
1 0 0 0 0 1 1 0 1 0 0 1 0 0 1 1 0 1 0 0 1 1 0 0 1 0 0 0 0 0 
20 11 20 14 20 5 17 24 14 17 24 8 8 20 17 14 14 17 5 11 14 0 5 17 5 8 17 24 5 24 5 11 6 11 20 20 24 15 0 14 0 14 15 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 11 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 17 24 17 11 17 5 14 17 21 20 8 17 17 11 17 5 17 11 14 8 14 14 0 11 11 21 24 24 24 24 5 8 11 20 8 0 5 24 0 21 0 11 24 5 8 14 0 5 20 0 0 8 20 14 8 11 11 5 0 5 

p34

11425
1 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 25 20 2 20 5 2 24 14 17 24 16 8 20 17 14 14 17 5 0 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 20 25 8 5 14 14 5 20 20 17 25 0 14 0 5 20 0 0 25 24 0 5 24 20 20 5 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 17 0 17 5 2 2 25 16 8 17 17 25 2 25 17 0 14 8 14 14 2 0 25 25 24 24 24 24 5 8 25 20 16 0 5 5 0 25 0 0 24 5 8 14 17 5 8 17 0 8 8 14 8 25 25 5 2 5 

p35

13425
1 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 25 20 2 20 5 2 24 14 17 24 16 8 20 17 14 14 17 5 0 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 20 25 8 5 14 14 5 20 20 17 25 0 14 0 5 20 0 0 25 24 0 5 24 20 20 5 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 17 0 17 5 2 2 25 16 8 17 17 25 2 25 17 0 14 8 14 14 2 0 25 25 24 24 24 24 5 8 25 20 16 0 5 5 0 25 0 0 24 5 8 14 17 5 8 17 0 8 8 14 8 25 25 5 2 5 

p36

15425
1 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 25 20 2 20 5 2 24 14 17 24 16 8 20 17 14 14 17 5 0 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 20 25 8 5 14 14 5 20 20 17 25 0 14 0 5 20 0 0 25 24 0 5 24 20 20 5 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 17 0 17 5 2 2 25 16 8 17 17 25 2 25 17 0 14 8 14 14 2 0 25 25 24 24 24 24 5 8 25 20 16 0 5 5 0 25 0 0 24 5 8 14 17 5 8 17 0 8 8 14 8 25 25 5 2 5 

p37

11702
1 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 
20 0 20 14 20 5 17 24 14 17 24 20 20 20 17 14 14 17 5 0 14 0 5 17 5 20 17 24 5 24 5 5 6 5 20 20 24 24 0 14 0 14 24 14 24 14 0 20 0 14 5 14 14 5 20 20 17 21 0 14 0 5 20 0 0 0 24 0 5 24 20 6 5 17 24 20 24 20 14 24 20 0 20 17 17 17 17 0 20 5 17 24 17 0 17 5 14 17 21 20 20 17 17 0 17 5 17 0 14 14 14 14 17 0 0 21 24 24 24 24 5 20 5 20 20 0 5 24 0 21 0 0 24 5 20 14 17 5 20 17 0 20 20 14 20 0 0 5 17 5 

p38

10888
1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 
20 11 20 14 20 5 17 24 14 17 24 16 8 20 17 14 14 17 5 11 14 0 5 17 5 8 17 24 5 24 5 11 20 11 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 17 24 17 11 17 5 14 14 11 16 8 17 17 11 17 5 17 11 14 8 14 14 17 11 11 11 24 24 24 24 5 8 11 20 16 0 5 24 0 5 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 11 11 5 17 5 

p39

12561
1 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 
20 0 20 14 20 5 17 24 14 17 24 16 8 20 17 14 14 17 5 0 14 0 5 17 5 8 17 24 5 24 5 5 20 5 20 20 24 24 0 14 0 14 24 8 24 14 0 20 0 8 5 14 14 5 20 20 17 0 0 14 0 5 20 0 0 0 24 0 5 24 20 20 5 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 17 24 17 0 17 5 14 14 5 16 8 17 17 0 17 5 17 0 14 8 14 14 17 0 0 0 24 24 24 24 5 8 5 20 16 0 5 24 0 5 0 0 24 5 8 14 17 5 20 17 0 8 20 14 8 0 0 5 17 5 

p40

14161
1 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 
20 0 20 14 20 5 17 24 14 17 24 16 8 20 17 14 14 17 5 0 14 0 5 17 5 8 17 24 5 24 5 5 20 5 20 20 24 24 0 14 0 14 24 8 24 14 0 20 0 8 5 14 14 5 20 20 17 0 0 14 0 5 20 0 0 0 24 0 5 24 20 20 5 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 17 24 17 0 17 5 14 14 5 16 8 17 17 0 17 5 17 0 14 8 14 14 17 0 0 0 24 24 24 24 5 8 5 20 16 0 5 24 0 5 0 0 24 5 8 14 17 5 20 17 0 8 20 14 8 0 0 5 17 5 

p41

6810
1 0 1 1 1 1 1 0 0 0 
5 6 4 6 2 5 3 3 5 3 4 6 2 6 2 2 5 3 0 6 6 6 4 4 6 5 5 4 5 5 0 0 0 0 3 2 2 6 6 2 2 3 3 3 3 5 0 5 6 4 4 6 6 6 2 2 2 3 3 3 0 0 6 5 0 6 6 6 4 4 0 4 4 0 3 2 2 2 6 5 5 2 2 2 2 2 2 2 2 2 

p42

5781
1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 1 
11 14 11 14 19 19 0 11 17 17 11 19 19 14 19 0 0 17 14 14 14 11 14 11 11 11 11 17 17 11 0 19 19 14 14 19 19 0 0 0 0 11 17 0 11 14 19 19 0 19 17 17 17 17 17 11 17 11 14 11 11 11 11 11 11 11 0 0 19 19 19 19 19 19 19 19 19 19 19 19 

p43

5957
0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 
12 21 6 5 13 17 26 21 12 29 5 13 13 17 12 6 21 21 12 12 26 26 21 17 17 13 29 6 29 29 5 13 13 13 21 17 12 12 21 6 6 6 29 5 5 26 26 17 17 6 21 26 26 6 6 6 21 17 13 29 5 29 29 29 29 29 29 29 29 29 

p44

7585
1 1 1 1 1 1 1 1 1 1 
4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 1 1 1 1 1 7 6 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 6 8 8 8 8 7 5 9 9 7 6 5 5 8 8 7 7 9 5 5 5 9 3 0 6 6 8 1 5 4 9 9 7 7 9 6 6 5 2 7 9 7 9 9 7 6 5 7 5 

p45

6458
1 0 1 0 1 1 0 0 0 1 0 0 0 1 1 1 0 0 0 0 
0 0 0 0 0 0 0 15 15 15 15 15 15 15 15 2 2 2 2 2 2 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 0 0 2 2 4 2 15 14 13 13 15 5 13 13 14 13 13 0 14 15 9 9 2 9 15 13 13 13 13 4 9 9 15 2 13 13 14 14 14 14 9 13 

p46

6065
0 0 1 0 0 1 0 0 0 1 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 
10 10 10 10 10 10 10 15 22 22 15 22 22 22 22 2 2 2 2 2 2 5 5 5 5 5 5 9 9 9 9 9 9 13 10 2 2 5 14 22 22 15 15 22 14 14 14 14 13 22 10 13 13 22 2 14 13 22 14 14 15 15 22 14 13 13 14 13 15 15 

p47

6634
1 1 1 1 1 1 1 1 1 1 
0 0 0 0 0 0 0 0 0 0 1 1 1 1 2 2 1 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 0 7 7 7 7 7 8 8 8 8 8 9 8 0 9 9 9 9 6 2 2 9 2 

p48

5613
1 0 0 1 0 1 1 0 1 0 1 0 0 1 1 0 0 1 0 1 
0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 8 8 8 8 8 8 8 8 8 6 5 10 10 10 10 10 10 13 13 13 13 13 13 13 14 14 13 14 13 0 14 14 14 14 17 17 17 17 17 17 17 17 19 19 19 19 19 19 19 

p49

5696
1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 1 0 0 0 0 1 1 1 0 
0 0 0 0 0 0 0 0 5 5 5 5 5 6 6 6 6 6 6 6 6 6 9 9 9 9 9 14 14 14 14 14 14 14 14 14 17 17 17 17 17 17 20 20 20 20 20 20 21 20 21 20 0 21 21 21 21 26 26 26 26 26 26 26 27 27 28 28 28 28 

p50

9454
1 0 1 1 0 1 1 1 0 1 
3 6 3 0 9 9 5 5 3 7 7 0 9 9 9 9 9 5 5 3 0 0 0 0 0 0 7 3 3 7 7 7 3 3 3 5 9 2 0 6 0 9 9 2 5 5 5 5 5 3 3 5 6 0 0 0 6 6 2 2 2 7 7 7 3 3 6 3 7 7 3 6 6 6 6 3 3 3 3 3 3 5 2 2 2 2 6 7 2 7 2 2 2 2 2 2 2 2 2 2 

p51

7834
1 1 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 1 1 
15 0 19 10 13 13 5 5 15 1 5 19 13 13 13 13 13 5 5 15 0 0 10 19 10 10 1 19 19 15 1 1 19 19 15 5 13 13 10 0 0 13 13 13 5 5 5 5 5 15 15 5 0 10 10 10 13 0 13 13 13 5 1 5 15 15 10 19 1 1 15 0 0 0 10 19 19 19 19 19 19 5 5 13 18 13 18 5 18 1 13 13 18 18 18 18 18 18 18 18 

p52

9588
0 1 0 1 1 1 1 1 1 1 
7 7 7 7 7 7 7 7 3 4 4 4 3 4 4 4 4 8 8 8 8 3 8 3 3 9 9 9 9 9 9 9 9 5 6 6 6 6 6 6 6 6 6 6 7 7 4 5 5 5 5 3 4 6 7 5 3 3 3 4 6 5 5 5 3 5 5 6 4 7 6 6 4 3 3 5 3 4 7 1 6 3 3 5 5 3 3 7 5 3 1 1 1 1 5 1 3 4 3 7 

p53

8910
0 0 0 1 0 1 1 1 0 1 0 0 1 0 0 1 0 0 1 0 
5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 7 7 12 12 12 12 3 3 12 3 9 9 9 9 9 9 9 9 15 18 18 18 18 18 18 18 18 18 18 5 5 7 12 3 15 15 3 7 18 5 15 3 3 3 6 18 15 15 15 3 3 15 5 6 5 18 18 6 3 3 15 3 6 6 15 18 7 3 15 15 3 3 6 15 3 15 15 18 18 15 18 3 6 3 5 

p54

9831
1 0 1 1 1 1 1 0 1 0 
2 2 2 2 2 2 2 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 8 8 8 8 8 8 8 3 6 6 6 6 6 6 6 6 6 6 6 5 5 6 5 5 5 6 6 0 0 0 0 0 4 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2 4 

p55

8084
0 0 1 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 1 0 
18 18 18 18 18 18 18 2 2 2 2 2 2 2 2 2 2 2 2 12 12 12 12 12 6 12 12 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 6 7 7 6 7 7 7 7 7 7 7 7 7 7 13 7 13 7 7 7 7 13 13 7 13 13 18 13 13 13 13 13 15 15 15 15 15 15 15 15 15 15 15 18 18 18 18 18 18 18 18 18 

p56

21429
1 0 1 1 1 0 1 1 1 1 1 0 1 0 1 0 1 0 0 1 0 1 1 1 1 1 0 1 1 0 
7 19 21 27 2 12 21 27 22 28 4 28 10 3 28 7 3 10 22 0 27 16 23 24 10 27 27 19 4 2 19 19 4 16 27 6 8 8 24 16 7 9 6 4 8 19 3 21 19 14 24 16 24 16 8 6 25 9 22 7 4 0 7 8 3 25 23 14 28 25 7 12 19 9 23 23 10 23 8 16 10 0 9 25 4 10 6 2 27 7 28 6 25 25 2 3 28 6 0 28 28 21 25 7 4 0 4 24 22 3 19 4 27 12 12 8 28 7 14 8 9 25 28 19 9 16 2 12 19 0 28 24 25 10 23 9 3 3 28 10 12 22 12 25 25 2 24 21 27 25 24 0 23 0 8 28 2 16 3 3 3 27 10 24 23 27 23 4 3 21 23 8 19 14 4 2 0 10 4 10 2 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 21 14 19 

p57

27059
1 0 1 1 1 0 1 1 1 0 1 0 1 0 1 0 0 0 0 1 0 1 1 1 1 1 0 1 1 0 
7 19 21 27 2 12 21 27 22 28 4 28 10 3 28 7 3 10 22 0 27 21 23 24 10 27 27 19 4 2 19 19 4 21 27 6 8 8 24 21 7 8 6 4 8 19 3 21 19 14 24 24 24 21 8 6 25 8 22 7 4 0 7 8 3 25 23 14 28 25 7 12 19 8 23 23 10 23 8 24 10 0 8 25 4 10 6 2 27 7 28 6 25 25 2 3 28 6 0 28 28 21 25 7 4 0 4 24 22 3 19 4 27 12 12 8 28 7 14 8 14 25 28 19 4 21 2 12 19 0 28 24 25 10 23 8 3 3 28 10 12 22 12 25 25 2 24 21 27 25 24 0 23 0 8 28 2 21 3 3 3 27 10 24 23 27 23 4 3 21 23 10 19 14 4 2 0 10 4 10 2 21 2 19 12 3 28 23 0 21 2 2 6 6 7 12 7 2 14 19 

p58

38975
1 0 1 1 1 0 0 1 1 0 1 0 1 0 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 0 
7 19 21 27 2 12 21 27 27 28 4 28 10 3 28 7 3 10 27 0 27 21 23 24 10 27 27 19 4 2 19 19 4 21 27 12 8 8 24 21 7 8 12 4 8 19 3 21 19 14 24 24 24 21 8 12 25 8 27 7 4 0 7 8 3 25 23 14 28 25 7 12 19 8 23 23 10 23 8 24 10 0 8 25 4 10 19 2 27 7 28 19 25 25 2 3 28 12 0 28 28 21 25 7 4 0 4 24 27 3 19 4 27 12 12 8 28 7 14 8 14 25 28 19 4 21 2 12 19 0 28 24 25 10 23 8 3 3 28 10 12 27 12 25 25 2 24 21 24 25 24 0 23 0 8 28 2 21 3 3 3 0 10 2 23 24 23 4 3 21 23 10 19 14 4 2 0 10 4 10 2 21 2 28 25 3 0 23 0 21 2 23 12 14 7 7 7 23 14 14 

p59

28730
1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 1 0 0 1 1 1 0 1 1 0 
18 19 2 27 2 12 2 27 18 28 4 28 13 13 28 18 13 20 27 0 18 16 23 24 10 18 27 19 4 2 19 19 4 16 27 6 20 8 24 16 18 8 6 4 8 19 13 2 19 20 24 16 24 16 8 6 25 8 18 25 4 0 18 8 13 25 23 19 28 25 18 12 19 8 23 23 20 23 8 16 10 0 8 25 4 13 6 2 27 25 28 6 25 25 2 13 28 6 0 28 28 16 25 18 4 0 4 24 27 13 19 4 27 12 12 8 28 25 0 8 20 25 28 19 4 16 2 12 19 0 28 24 25 20 23 8 13 13 28 10 12 27 12 25 25 2 24 16 27 12 24 0 23 0 8 28 2 16 13 13 13 27 10 24 23 27 23 4 13 2 23 20 19 10 4 2 0 10 4 10 2 16 24 6 12 8 28 23 0 16 2 16 6 6 18 12 18 16 10 6 

p60

20605
1 0 0 1 1 1 0 1 1 0 1 0 1 0 0 0 1 0 0 1 0 1 1 0 1 1 0 1 1 0 
7 19 21 27 21 12 21 27 22 28 4 28 10 3 28 7 3 10 22 0 27 16 5 24 10 27 27 19 4 21 19 19 4 16 27 12 8 8 24 16 7 8 12 4 8 19 3 21 19 10 24 16 24 16 8 12 25 8 22 7 4 0 7 8 3 25 5 19 28 25 7 12 19 8 5 10 10 5 8 16 10 0 8 25 4 10 19 5 27 7 28 19 25 25 0 3 28 12 0 28 28 21 25 7 4 0 4 24 22 3 19 4 27 12 12 8 28 7 0 8 8 25 28 19 4 16 21 12 19 0 28 24 25 10 5 8 3 3 28 10 12 22 12 25 25 5 24 21 27 25 24 0 10 0 8 28 5 16 3 3 3 27 10 24 5 27 5 4 3 21 5 8 19 10 4 21 0 10 4 10 5 21 21 19 12 8 28 10 0 21 21 21 19 4 7 12 7 21 10 19 

p61

24961
1 0 0 1 1 1 0 1 1 0 1 0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 0 1 1 0 
7 19 21 27 21 12 21 27 27 28 4 28 10 3 28 7 3 10 27 0 27 16 5 0 10 27 27 19 4 21 19 19 4 16 27 12 8 8 16 16 7 8 12 4 8 19 3 21 19 10 0 16 21 16 8 12 7 8 27 7 4 0 7 8 3 12 5 19 28 12 7 12 19 8 5 10 10 5 8 16 10 0 8 7 4 10 19 5 27 7 28 19 7 7 0 3 28 12 0 28 28 21 12 7 4 0 4 27 27 3 19 4 27 12 12 8 28 7 0 8 8 12 28 19 4 16 21 12 19 0 28 21 12 10 5 8 3 3 28 10 12 27 12 12 7 5 16 21 27 7 27 0 10 0 8 28 5 16 3 3 3 27 10 0 5 27 5 4 3 21 5 8 19 10 4 21 0 10 4 10 5 21 21 19 12 8 28 10 0 21 21 21 19 4 7 19 7 21 10 19 

p62

33690
1 0 0 1 1 1 0 1 1 0 1 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 0 
7 19 16 27 5 12 16 27 27 28 4 28 10 3 28 7 3 10 27 0 27 16 5 0 10 27 27 19 4 5 19 19 4 16 27 12 8 8 16 16 7 8 12 4 8 19 3 16 19 10 0 16 0 16 8 12 7 8 27 7 4 0 7 8 3 12 5 19 28 12 7 12 19 8 5 10 10 5 8 16 10 0 8 7 4 10 19 5 27 7 28 19 7 7 0 3 28 12 0 28 28 16 12 7 4 0 4 27 27 3 19 4 27 12 12 8 28 7 0 8 8 12 28 19 4 16 5 12 19 0 28 16 12 10 5 8 3 3 28 10 12 27 12 12 7 5 16 16 27 7 27 0 10 0 8 28 5 16 3 3 3 27 10 0 5 27 5 4 3 16 5 8 19 10 4 0 0 10 4 10 5 16 0 19 12 8 28 10 28 16 5 16 19 4 7 19 7 5 10 19 

p63

25399
0 0 1 0 1 0 1 0 1 0 0 0 0 1 0 0 1 1 1 0 0 0 0 1 1 1 0 0 1 0 
18 6 2 24 2 6 2 28 18 28 4 28 13 13 28 18 13 13 24 24 18 16 23 24 23 18 24 28 4 2 6 4 4 16 28 6 8 8 24 16 18 8 6 4 8 4 13 2 6 17 24 16 24 16 8 6 25 8 18 25 4 2 18 8 13 25 23 17 28 25 18 6 6 8 23 23 8 23 8 16 23 17 8 25 4 13 6 2 24 25 28 6 25 25 2 13 28 6 17 28 28 16 25 18 4 24 4 24 16 13 6 4 18 6 6 8 28 25 17 8 8 25 17 6 4 16 2 28 4 17 28 24 25 8 23 8 13 13 28 17 6 18 28 25 25 2 24 16 18 25 24 17 23 17 8 28 2 16 13 13 13 24 23 24 23 24 23 4 13 2 23 8 28 17 4 2 17 23 4 23 2 16 2 6 6 8 28 23 17 2 2 2 6 4 25 25 25 2 23 28 

p64

20530
1 0 0 1 1 1 0 1 1 0 1 0 1 0 0 0 0 0 0 1 0 1 1 0 1 1 0 1 1 0 
7 19 21 27 21 12 21 27 22 28 4 28 10 3 28 7 3 10 22 0 27 21 5 24 10 27 27 19 4 21 19 19 4 21 27 12 8 8 24 21 7 8 12 4 8 19 3 21 19 10 24 24 24 21 8 12 25 8 22 7 4 0 7 8 3 25 5 19 28 25 7 12 19 8 5 10 10 5 8 24 10 0 8 25 4 10 19 5 27 7 28 19 25 25 0 3 28 12 0 28 28 21 25 7 4 0 4 24 22 3 19 4 27 12 12 8 28 7 0 8 8 25 28 19 4 21 21 12 19 0 28 24 25 10 5 8 3 3 28 10 12 22 12 25 25 5 24 21 27 25 24 0 10 0 8 28 5 21 3 3 3 27 10 24 5 27 5 4 3 21 5 8 19 10 4 21 0 10 4 10 5 21 21 19 12 8 28 10 0 21 21 21 19 4 7 12 7 21 10 19 

p65

24445
0 0 0 1 1 1 0 1 1 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 1 1 0 
7 19 21 27 21 12 21 27 27 28 4 28 10 3 28 7 3 10 27 27 27 21 5 24 10 27 27 19 4 21 19 19 4 21 27 12 8 8 24 21 7 8 12 4 8 19 3 21 19 10 24 24 24 21 8 12 7 8 27 7 4 24 7 8 3 12 5 19 28 12 7 12 19 8 5 10 10 5 8 24 10 5 8 7 4 10 19 5 27 7 28 19 7 7 5 3 28 12 10 28 28 21 12 7 4 24 4 24 27 3 19 4 27 12 12 8 28 7 28 8 8 12 28 19 4 21 21 12 19 28 28 24 12 10 5 8 3 3 28 10 12 27 12 12 7 5 24 21 27 7 24 28 10 28 8 28 5 21 3 3 3 27 10 24 5 27 5 4 3 21 5 8 19 10 4 21 24 10 4 10 5 21 21 19 12 8 28 10 27 21 21 21 19 4 7 12 7 21 10 19 

p66

31669
0 0 0 0 1 1 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 
7 28 21 27 21 12 21 27 27 28 4 28 10 5 28 7 10 10 27 27 27 21 5 27 10 27 27 28 4 21 4 4 4 21 27 12 8 8 27 21 7 8 12 4 8 4 8 21 28 10 27 21 21 21 8 12 7 8 27 7 4 5 7 8 8 12 5 28 28 12 7 12 4 8 5 10 10 5 8 21 10 5 8 7 4 10 4 5 27 7 28 4 7 7 5 8 28 12 10 28 28 21 12 7 4 27 4 27 27 8 4 4 27 12 12 8 28 7 28 8 8 12 28 4 4 21 21 12 4 28 28 21 12 10 5 8 8 8 28 10 12 27 12 12 7 5 27 21 27 7 27 28 10 28 8 28 5 21 8 8 10 27 10 21 5 27 5 4 8 21 5 8 28 10 4 21 28 10 4 10 5 21 21 28 12 8 28 10 27 21 21 21 12 4 7 12 7 21 10 28 

p67

25032
0 0 1 0 1 0 1 0 1 0 0 0 0 1 0 0 1 1 1 0 0 0 0 1 1 1 0 0 1 0 
18 6 2 24 2 6 2 28 24 28 4 28 13 13 28 18 13 13 16 24 18 16 23 24 23 18 24 17 4 2 6 6 4 16 28 6 8 8 24 16 18 8 6 4 8 4 13 16 28 17 24 16 24 16 8 6 18 8 18 25 4 2 18 8 13 25 23 17 28 25 18 6 6 8 23 23 13 23 8 16 23 17 8 25 4 13 6 2 24 25 28 6 25 25 2 13 28 6 17 28 28 16 25 18 4 24 4 24 16 13 17 4 18 6 6 8 28 25 17 8 8 25 17 6 4 16 2 25 4 17 28 24 25 8 23 8 13 13 28 23 6 18 28 25 25 2 24 16 18 25 24 17 23 17 8 28 2 16 13 13 13 24 23 24 23 18 23 4 13 16 23 8 28 17 4 2 24 23 4 23 2 16 2 6 6 8 28 23 17 2 2 16 6 4 25 25 25 2 13 28 

p68

20735
1 0 1 1 1 0 0 1 1 0 1 0 1 0 0 0 0 0 0 1 0 1 1 1 1 1 0 1 1 0 
7 19 21 27 2 12 21 27 22 28 4 28 10 3 28 7 3 10 22 0 27 21 23 24 10 27 27 19 4 2 19 19 4 21 27 12 8 8 24 21 7 8 12 4 8 19 3 21 19 10 24 24 24 21 8 12 25 8 22 7 4 0 7 8 3 25 23 19 28 25 7 12 19 8 23 23 10 23 8 24 10 0 8 25 4 10 19 2 27 7 28 19 25 25 2 3 28 12 0 28 28 21 25 7 4 0 4 24 22 3 19 4 27 12 12 8 28 7 0 8 8 25 28 19 4 21 2 12 19 0 28 24 25 10 23 8 3 3 28 10 12 22 12 25 25 2 24 21 27 25 24 0 23 0 8 28 2 21 3 3 3 27 10 24 23 27 23 4 3 21 23 8 19 10 4 2 0 10 4 10 2 21 2 19 12 8 28 23 0 21 2 21 19 4 7 12 7 21 10 19 

p69

24803
1 0 0 1 1 0 0 1 1 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1 0 0 0 1 1 0 
7 19 21 27 21 12 21 27 27 28 4 28 10 3 28 7 3 10 27 0 27 21 23 0 10 27 27 19 4 21 19 19 4 21 27 12 8 8 27 21 7 8 12 4 8 19 3 21 19 10 0 21 21 21 8 12 7 8 27 7 4 0 7 8 3 12 23 19 28 12 7 12 19 8 23 23 10 23 8 21 10 0 8 7 4 10 19 0 27 7 28 19 7 7 0 3 28 12 0 28 28 21 12 7 4 0 4 27 27 3 19 4 27 12 12 8 28 7 0 8 8 12 28 19 4 21 21 12 19 0 28 21 12 10 23 8 3 3 28 10 12 27 12 12 7 23 27 21 27 7 27 0 23 0 8 28 21 21 3 3 3 27 10 0 23 27 23 4 3 21 23 8 19 10 4 21 0 10 4 10 23 21 21 19 12 8 28 23 0 21 21 21 19 4 7 12 7 21 10 19 

p70

33203
1 0 0 1 1 0 0 1 1 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1 0 0 0 1 1 0 
7 19 21 27 21 12 21 27 27 28 4 28 10 3 28 7 3 10 27 0 27 21 23 0 10 27 27 19 4 21 19 19 4 21 27 12 8 8 27 21 7 8 12 4 8 19 3 21 19 10 0 21 21 21 8 12 7 8 27 7 4 0 7 8 3 12 23 19 28 12 7 12 19 8 23 23 10 23 8 21 10 0 8 7 4 10 19 0 27 7 28 19 7 7 0 3 28 12 0 28 28 21 12 7 4 0 4 27 27 3 19 4 27 12 12 8 28 7 0 8 8 12 28 19 4 21 21 12 19 0 28 21 12 10 23 8 3 3 28 10 12 27 12 12 7 23 27 21 27 7 27 0 23 0 8 28 21 21 3 3 3 27 10 0 23 27 23 4 3 21 23 8 19 10 4 21 0 10 4 10 23 21 21 19 12 8 28 23 0 21 21 21 19 4 7 12 7 21 10 19 

p71

26211
0 0 1 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 1 0 
18 19 2 24 2 12 2 28 18 28 4 28 13 13 28 18 13 13 24 24 18 16 23 24 23 18 24 19 4 2 19 19 4 16 28 12 8 8 24 16 18 8 12 4 8 19 13 2 19 17 24 16 24 16 8 12 25 8 18 25 4 2 18 8 13 25 23 17 28 25 18 12 19 8 23 23 8 23 8 16 23 17 8 25 4 13 19 2 24 25 28 19 25 25 2 13 28 12 17 28 28 16 25 18 4 24 4 24 16 13 19 4 18 12 12 8 28 25 17 8 8 25 17 19 4 16 2 12 19 17 28 24 25 8 23 8 13 13 28 17 12 18 12 25 25 2 24 16 18 25 24 17 23 17 8 28 2 16 13 13 13 24 23 2 23 18 23 4 13 2 13 8 19 17 4 2 17 13 4 8 2 16 2 19 12 8 12 23 17 16 2 2 19 4 25 12 25 16 8 19 
(2)模拟退火算法

此处的简单贪心算法指的是为每个顾客寻找工厂时,只执行一次寻找操作,不再进行强制删减工厂的后续迭代操作,与前面的改进的贪心算法有所不同,可以认为是前面所说的改进贪心算法中的第一次迭代的结果

样例简单贪心结果结果时间(s)
p1944089705.095
p2812679205.011
p31012696494.667
p412126112976.606
p5937591695.608
p6806178875.394
p71006198554.873
p812061115724.601
p9904087694.259
p10772677264.266
p11972692265.123
p1211726106274.234
p131203286225.422
p14918075544.447
p151318095924.62
p1617180113914.647
p171203289425.004
p18918075214.732
p191318093954.374
p2017180110284.977
p211203285684.721
p22918072204.506
p231318093964.484
p2417180114904.61
p2518896126236.511
p2616131113228.518
p2721531140227.062
p2826931157296.791
p2920310136728.519
p3016239118886.493
p3121639149807.385
p3227039164896.495
p3318754133876.461
p3415989115826.516
p3521389134856.236
p3626789156887.26
p3718754127936.441
p3815989112827.016
p3921389134826.839
p4026789156826.081
p41722671005.465
p42995773315.831
p431244864415.223
p44758571604.835
p45984874145.03
p461263966695.322
p47663463145.134
p48904459996.06
p491242060495.49
p501006292596.972
p511118283535.871
p521036494405.418
p531277798595.361
p541036295456.153
p551209992025.396
p5623882224677.348
p57328823025910.527
p58538824637810.545
p59391213382510.317
p6023882232697.243
p6132882303697.301
p62538824569010.524
p63391213249519.254
p6423882228859.723
p65328822992910.81
p6653882475507.641
p6739671340829.178
p6823882228538.131
p6932882303017.703
p7053882489768.062
p7139121349878.896
每个输入样例使用模拟退火算法的输出结果

p1

8970
1 1 1 1 1 1 1 0 1 0 
8 2 1 6 3 8 2 4 4 1 4 0 3 2 8 3 2 0 6 4 3 4 6 4 2 5 1 5 0 5 2 6 0 3 4 4 4 3 0 4 1 8 1 5 4 0 2 0 4 0 

p2

7920
1 1 1 1 1 1 1 0 1 1 
8 2 1 6 3 8 2 4 4 1 9 0 3 2 8 3 4 0 9 4 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 4 0 2 0 4 0 

p3

9649
1 1 1 1 1 1 0 0 1 1 
8 2 1 5 3 8 2 4 4 1 9 0 3 2 8 3 4 0 9 4 3 4 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 4 0 2 0 4 0 

p4

11297
1 1 1 1 1 1 0 0 1 1 
0 2 1 5 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 4 3 8 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 4 0 4 0 4 3 

p5

9169
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 2 3 7 0 

p6

7887
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 7 6 4 2 5 1 5 8 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 0 

p7

9855
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 2 3 7 0 

p8

11572
1 1 1 1 1 1 1 0 1 1 
8 8 1 6 1 8 2 4 4 1 9 8 0 2 8 3 2 0 9 9 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 4 0 9 0 4 3 

p9

8769
1 1 1 1 1 1 1 0 1 1 
8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 4 3 8 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 4 0 2 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

9226
1 1 1 1 1 0 1 0 1 1 
8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 4 3 8 6 4 2 6 1 1 0 1 2 6 0 3 9 4 4 3 0 4 1 8 1 6 4 0 2 0 4 0 

p12

10627
1 0 1 1 1 1 0 0 1 0 
8 8 5 5 3 8 2 4 4 5 4 8 3 2 8 3 2 0 2 4 3 8 5 4 2 5 3 5 0 5 2 5 0 3 4 4 4 3 0 4 3 8 3 5 4 0 2 0 4 0 

p13

8622
0 1 0 1 0 0 0 0 0 1 1 0 1 1 0 1 1 1 0 1 
16 12 10 10 1 12 17 13 12 17 15 19 1 10 13 3 15 10 17 9 12 15 15 19 9 17 16 17 1 17 13 15 13 16 3 10 3 19 19 13 9 16 15 16 3 13 12 10 19 9 

p14

7554
1 1 0 0 0 1 1 0 0 0 1 1 1 1 0 1 0 1 0 1 
0 12 10 10 1 12 17 13 12 17 15 19 1 6 13 11 15 10 17 6 12 15 15 19 6 17 0 17 1 17 13 15 13 0 1 10 11 19 19 13 6 0 5 0 11 5 12 10 19 6 

p15

9592
0 1 0 1 0 1 0 1 0 1 1 0 0 1 0 0 1 1 0 1 
16 1 10 10 1 13 17 13 3 17 7 19 1 10 13 3 5 10 17 9 1 5 7 19 9 17 16 17 1 17 13 7 13 16 3 10 3 19 19 13 9 16 5 16 3 5 7 10 19 9 

p16

11391
1 1 0 0 0 0 1 0 0 1 1 0 0 1 1 1 0 1 0 1 
0 1 10 10 1 13 17 13 14 17 15 19 1 6 13 14 15 10 17 9 14 15 15 19 6 1 0 17 1 17 13 15 13 0 1 10 17 19 19 13 6 0 15 0 9 13 14 10 19 9 

p17

8942
1 1 0 1 1 0 1 0 0 0 1 0 0 1 1 1 0 1 0 0 
0 1 10 10 1 15 17 13 14 17 15 4 1 6 13 3 15 10 4 6 14 15 15 13 6 17 0 17 1 17 13 15 13 0 3 10 3 1 1 13 6 0 15 0 3 13 14 10 4 6 

p18

7521
0 1 0 0 0 1 1 0 0 0 1 1 0 1 0 1 1 1 0 1 
16 1 10 10 1 15 17 13 10 17 15 19 1 6 13 11 15 10 17 6 1 15 15 19 6 17 16 17 1 17 13 15 13 16 1 10 11 19 19 13 6 16 5 16 11 5 15 10 19 6 

p19

9395
0 1 0 0 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 1 
16 12 10 10 1 12 17 13 12 17 15 19 1 6 13 12 15 10 17 9 12 15 15 19 6 1 16 17 1 17 13 15 13 16 1 10 17 19 19 13 6 16 15 16 9 13 12 10 19 9 

p20

11028
0 1 0 1 0 0 0 0 0 1 1 0 0 1 0 1 1 1 0 1 
16 1 10 10 1 15 17 13 3 17 15 19 1 10 13 3 15 10 17 9 1 15 15 19 9 17 16 17 1 17 13 15 13 16 3 10 3 19 19 13 9 16 15 16 3 13 1 10 19 9 

p21

8568
1 1 0 1 0 0 1 0 0 0 1 0 0 1 1 1 0 1 0 1 
0 1 10 10 1 15 17 13 14 17 15 19 1 6 13 3 15 10 17 6 14 15 15 19 6 17 0 17 1 17 13 15 13 0 3 10 3 19 19 13 6 0 0 0 3 13 14 10 19 6 

p22

7220
1 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 0 1 0 1 
0 12 10 10 19 12 17 13 12 17 15 19 19 10 13 11 15 10 17 9 12 15 15 19 9 17 0 17 12 17 13 15 13 0 11 10 11 19 19 13 10 0 0 0 11 13 12 10 19 9 

p23

9396
0 1 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 1 0 1 
16 12 10 10 1 12 17 13 12 17 15 19 1 6 13 11 15 10 17 6 12 15 15 19 6 17 16 17 1 17 13 15 13 16 1 10 11 19 19 13 6 16 15 16 11 13 12 10 19 6 

p24

11490
1 1 0 1 0 0 1 1 0 0 1 0 0 1 1 0 0 0 0 1 
0 1 10 10 1 13 3 13 14 3 7 19 1 6 13 3 7 10 1 6 14 7 7 19 6 1 0 3 1 3 13 7 13 0 3 10 3 19 19 13 6 0 0 0 3 13 14 10 19 6 

p25

12623
1 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 20 14 20 5 2 24 14 17 24 8 8 20 2 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 24 24 20 20 11 17 24 8 24 20 14 24 20 7 20 17 17 17 17 7 20 5 2 24 17 11 7 5 2 14 25 20 8 7 14 25 2 25 7 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 20 8 0 5 24 0 25 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5 

p26

11322
1 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 20 2 20 5 2 24 14 17 24 8 8 20 7 14 14 17 5 11 14 0 5 7 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 7 20 17 7 17 17 7 20 5 2 24 17 11 7 5 2 2 25 20 8 7 17 25 2 25 7 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 20 8 0 5 24 0 25 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5 

p27

14022
1 0 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 20 14 20 5 2 24 14 17 24 8 8 20 7 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 7 13 11 8 5 14 14 5 20 20 17 11 11 14 0 5 20 11 11 11 24 0 24 24 20 20 11 0 24 8 24 20 14 24 20 7 13 17 2 17 2 7 20 5 2 24 17 11 7 5 2 14 25 13 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 0 5 24 0 25 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5 

p28

15729
1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 13 14 20 5 2 24 14 17 24 8 8 20 0 14 14 17 5 11 14 0 5 2 24 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 5 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 13 17 2 17 17 0 20 5 2 24 17 11 0 5 2 2 25 20 8 0 17 25 2 25 0 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 0 5 24 0 25 0 11 24 5 8 14 0 5 20 17 0 8 20 14 8 25 25 5 2 5 

p29

13672
1 0 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 0 0 0 
20 11 13 2 20 5 2 24 8 17 22 8 8 20 17 14 14 17 5 11 2 0 5 17 22 8 2 24 5 22 5 25 13 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 25 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 22 0 22 22 20 20 11 17 24 8 22 20 14 24 20 7 13 17 17 17 17 7 20 5 2 24 17 11 17 5 2 7 25 13 8 17 17 25 2 25 7 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 0 5 22 0 25 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5 

p30

11888
1 0 1 0 0 1 0 0 1 1 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 1 
20 11 13 2 20 5 2 9 14 17 24 8 8 20 2 14 14 17 5 11 2 0 5 17 5 8 2 24 5 9 5 25 13 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 29 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 9 0 9 9 20 20 11 17 24 8 9 20 2 24 20 0 13 17 17 17 17 0 20 5 2 24 17 11 17 9 2 2 25 13 8 17 17 25 2 29 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 0 5 9 0 29 0 11 24 29 8 14 0 5 20 17 0 8 20 14 8 25 25 5 2 5 

p31

14980
1 0 1 0 0 1 0 1 1 1 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 1 0 
13 11 13 2 13 5 2 9 14 17 9 8 8 20 17 14 14 17 5 11 2 0 9 17 5 8 2 24 5 9 5 25 20 25 20 20 24 24 0 14 0 14 24 28 24 14 7 13 11 8 5 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 9 0 9 9 13 20 11 17 24 8 9 20 14 24 20 7 20 17 2 17 17 7 20 5 2 24 17 11 17 5 2 2 25 13 8 17 17 25 2 25 17 11 28 28 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 0 5 9 0 25 0 11 24 25 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5 

p32

16489
1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 1 
20 11 13 2 20 5 2 24 8 17 29 8 8 20 17 14 14 17 25 11 2 0 29 17 29 8 2 24 5 24 29 25 13 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 29 14 14 5 13 20 17 11 11 14 0 5 20 11 11 11 24 0 29 29 20 20 11 17 24 8 5 20 14 24 20 0 13 17 17 17 17 0 20 5 2 24 17 11 17 24 2 2 25 13 8 17 17 25 2 29 0 11 14 8 14 14 2 11 11 25 24 24 5 5 5 8 25 13 8 0 5 5 0 29 0 11 24 29 8 14 0 5 20 17 0 8 20 14 8 25 25 5 2 5 

p33

13387
1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 1 0 1 0 0 1 0 0 0 1 1 0 0 0 1 
20 11 20 2 20 5 2 24 14 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 13 25 20 20 24 15 0 14 0 14 15 8 24 14 0 13 11 8 29 14 14 5 13 20 17 11 11 14 0 5 20 11 11 11 24 0 24 24 20 20 11 17 24 8 24 20 14 24 20 0 13 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 13 8 17 17 25 2 29 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 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 

p34

11582
1 0 1 0 0 1 0 0 1 1 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 20 2 20 5 2 9 14 17 9 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 13 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 5 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 9 0 5 9 20 20 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 13 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 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

13485
1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 13 2 20 5 2 24 14 17 5 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 5 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 24 0 24 5 20 20 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 13 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 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

15688
1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 13 2 20 5 2 24 14 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 5 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 24 0 5 5 20 20 11 17 24 8 24 20 14 24 20 0 13 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 5 24 5 8 25 13 8 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

12793
1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 20 2 20 5 2 24 14 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 13 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 5 14 14 5 13 20 17 11 11 14 0 5 20 11 11 11 24 0 24 24 20 20 11 17 24 8 24 20 14 24 20 0 13 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 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 

p38

11282
1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 13 2 20 5 2 24 14 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 13 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 5 14 14 5 20 20 17 11 11 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 17 11 17 24 2 2 25 13 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 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 

p39

13482
1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 20 2 20 5 2 24 14 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 5 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 13 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 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 

p40

15682
1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 
20 11 13 2 20 5 2 24 14 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 13 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 5 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 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 

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

7331
0 1 1 1 0 1 1 0 1 0 0 1 0 0 1 1 1 0 1 1 
2 14 11 5 15 18 16 3 16 1 11 18 6 14 6 15 15 2 14 14 5 11 5 8 8 8 11 16 2 3 1 19 6 8 14 19 6 15 1 1 1 3 3 16 11 5 8 19 15 15 16 1 1 3 2 5 2 14 14 14 11 11 3 3 11 3 16 15 19 6 18 18 19 19 19 18 18 18 19 19 

p43

6441
1 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 1 
12 0 15 23 25 17 25 12 27 29 23 23 25 17 12 6 15 15 12 12 25 25 0 17 17 25 29 6 29 29 29 23 23 25 0 0 25 12 15 6 27 12 27 23 29 25 25 17 17 15 15 0 0 6 6 6 0 0 23 29 29 27 1 29 27 29 1 27 1 29 

p44

7160
1 1 1 1 1 1 1 1 1 1 
4 4 4 4 4 4 4 4 6 6 0 0 0 0 0 0 1 1 1 7 1 1 6 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 0 1 1 2 8 7 5 9 7 7 6 5 5 8 8 7 7 9 5 5 5 9 3 0 6 6 8 1 0 4 9 5 7 7 8 6 6 5 8 7 9 9 9 9 9 6 5 7 5 

p45

7414
1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 0 1 0 0 0 
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 3 1 16 16 3 6 16 13 13 11 16 13 16 14 6 10 10 3 2 0 16 13 13 11 11 10 10 13 2 13 13 14 14 11 16 10 13 

p46

6669
1 1 1 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 
0 0 0 0 0 0 0 1 18 28 1 1 1 1 1 2 2 3 2 3 2 6 6 6 6 6 6 9 9 9 9 13 9 9 0 2 3 6 3 28 28 3 3 28 6 18 18 27 13 28 0 27 13 1 3 18 13 18 18 3 3 1 28 18 27 27 27 13 3 18 

p47

6314
1 1 1 1 1 1 1 1 1 1 
0 0 0 0 0 0 2 0 2 0 1 2 1 1 2 1 1 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

5999
1 0 1 0 0 1 0 1 1 1 0 1 0 1 1 0 0 1 1 0 
0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 5 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 8 8 8 8 8 8 8 9 9 9 9 11 11 11 11 11 11 13 13 13 13 13 13 13 14 14 13 14 13 0 14 14 14 14 17 17 17 17 17 17 17 17 18 18 18 18 18 18 18 

p49

6049
0 1 1 0 0 0 0 1 0 1 0 0 0 1 1 0 1 0 0 1 0 0 0 1 0 1 0 0 1 0 
1 1 1 2 1 2 2 2 2 2 2 2 2 7 7 7 7 7 7 7 7 7 9 9 9 9 9 13 13 14 13 13 13 14 13 14 16 16 16 16 16 16 19 19 19 19 19 19 23 19 23 19 1 23 23 23 23 25 25 25 25 25 25 25 28 28 28 28 1 28 

p50

9259
1 1 1 1 1 1 1 1 0 1 
3 6 3 0 2 2 5 5 3 7 7 4 6 9 6 9 9 2 5 3 6 0 0 4 0 4 7 4 4 7 7 7 3 3 3 5 9 9 0 6 0 9 9 9 5 5 5 5 5 3 3 5 6 0 0 0 6 6 2 2 9 7 7 7 3 3 0 4 7 7 3 6 6 0 0 4 4 3 3 4 3 5 2 2 2 2 1 7 2 7 9 9 1 2 1 1 1 9 1 1 

p51

8353
1 1 0 0 0 1 0 0 0 0 1 0 0 1 1 1 1 0 1 1 
15 0 19 10 16 13 5 16 15 1 5 14 18 13 13 13 13 16 5 15 0 0 10 14 14 14 1 19 19 15 1 1 19 19 15 5 13 13 10 0 0 13 13 13 16 5 5 5 5 19 15 5 0 14 14 10 13 0 18 16 13 5 1 5 15 15 10 19 1 1 15 0 0 0 10 19 19 19 19 19 19 5 16 13 18 13 13 5 16 1 13 13 18 18 18 13 13 18 13 13 

p52

9440
0 1 0 1 1 1 1 1 1 1 
7 7 7 7 7 7 7 7 3 4 4 4 3 4 4 4 4 8 8 8 8 3 3 8 3 5 9 9 9 9 9 9 9 5 6 6 6 6 6 6 6 6 6 6 7 7 4 8 8 5 5 3 4 6 7 5 3 3 3 4 6 9 5 5 3 3 9 6 4 7 9 6 4 3 3 5 3 4 7 1 6 3 3 5 5 3 3 7 5 3 5 1 9 1 5 1 3 4 3 7 

p53

9859
0 0 0 1 0 1 1 1 0 1 0 0 1 1 0 1 0 1 1 1 
5 5 5 5 5 5 5 5 19 19 19 7 7 7 7 7 7 12 13 12 12 13 12 12 3 9 9 9 9 9 15 9 9 15 18 18 18 18 18 18 18 18 18 18 5 5 7 12 12 15 15 3 7 18 5 15 3 3 3 6 18 9 15 13 3 13 9 18 6 5 17 18 6 3 3 15 3 6 6 15 18 19 13 15 15 3 3 6 15 3 15 15 17 17 15 17 3 6 3 5 

p54

9545
1 1 1 1 1 1 1 1 1 1 
7 7 7 7 7 7 7 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 3 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 6 6 6 8 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 0 0 0 4 4 4 4 4 4 4 4 9 4 9 4 9 9 9 9 9 

p55

9202
1 0 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 1 1 0 
17 18 17 18 18 18 17 2 8 8 8 8 2 8 2 8 2 2 8 6 6 6 2 6 6 2 6 6 6 6 6 14 14 6 6 6 6 6 6 7 7 7 0 7 0 0 0 0 0 0 0 0 7 7 7 7 7 7 7 7 11 11 9 11 11 11 11 7 11 9 13 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

22467
1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 
18 19 21 27 2 12 21 27 22 28 4 28 10 3 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 3 21 19 20 24 16 24 16 8 6 11 9 18 25 29 0 7 8 3 11 5 17 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 20 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 21 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 21 27 25 24 17 23 0 8 11 2 16 3 3 3 27 10 24 5 27 5 4 3 21 5 20 19 10 4 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 21 10 19 

p57

30259
1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 0 1 1 0 1 1 0 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 27 18 21 5 24 10 18 27 19 4 2 19 19 4 21 27 6 20 8 24 15 18 9 6 4 8 19 13 21 19 20 24 24 24 21 8 6 11 9 18 25 4 0 7 8 13 11 5 17 28 25 18 12 19 9 5 13 20 5 8 24 10 0 9 25 4 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 21 2 11 19 17 28 24 25 20 1 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 10 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 10 4 2 0 10 4 10 5 21 2 19 12 8 28 10 0 21 2 21 6 4 7 12 7 15 10 19 

p58

46378
0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 0 
18 19 21 27 2 12 21 27 22 28 4 28 10 1 28 18 1 20 22 27 18 16 5 24 10 18 27 19 4 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 3 21 19 20 24 16 24 16 8 6 11 9 18 25 4 2 7 8 3 11 5 17 28 25 18 12 19 9 23 23 20 23 8 16 10 17 9 25 4 10 6 5 27 7 28 6 25 25 2 3 11 6 17 28 28 21 25 18 4 24 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 21 27 25 24 17 23 17 8 11 2 16 3 3 1 27 10 2 5 27 5 4 3 21 1 20 19 10 4 2 24 10 4 10 5 21 2 19 12 8 28 23 17 21 2 21 6 4 7 12 7 21 10 19 

p59

33825
1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 
18 19 21 22 2 12 21 28 22 28 4 28 13 13 28 18 3 20 22 0 18 16 5 24 10 18 24 19 29 2 19 19 4 16 28 6 20 8 16 16 18 8 6 4 8 19 13 21 19 14 24 16 24 16 8 6 11 8 18 25 29 0 18 8 13 11 5 14 28 25 18 12 19 8 23 23 20 23 8 16 10 0 8 25 29 13 6 5 24 25 28 6 25 25 2 3 11 6 0 28 28 21 25 18 4 0 4 24 22 3 19 4 18 12 12 8 28 25 17 8 14 11 17 19 4 16 2 11 19 17 28 24 25 20 23 8 3 3 28 10 12 22 11 11 25 5 24 21 18 25 24 17 23 0 8 11 2 16 3 13 13 0 10 24 5 24 5 4 3 21 5 20 19 14 4 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 25 12 25 21 10 19 

p60

23269
1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 
18 19 21 27 2 12 15 27 18 28 4 28 13 13 28 18 3 20 27 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 27 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 27 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 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 

p61

30369
1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 0 
18 19 2 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 4 2 19 19 4 16 27 6 20 8 24 16 18 8 6 4 8 19 13 2 19 14 24 16 24 16 8 6 11 8 18 25 4 0 7 8 13 11 5 14 28 25 18 12 19 8 23 23 20 23 8 16 10 0 8 25 4 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 14 11 17 19 4 16 2 11 19 17 28 24 25 20 23 8 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 15 5 20 19 14 4 2 0 10 4 10 5 15 2 19 12 8 28 23 0 2 2 2 6 4 7 12 7 15 10 19 

p62

45690
1 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 0 
18 19 21 27 21 12 15 27 18 28 4 28 13 13 28 18 3 20 27 0 18 21 5 24 10 18 27 19 4 21 19 19 4 21 27 6 20 8 24 15 18 9 6 4 8 19 13 21 19 20 24 24 24 21 8 6 11 9 18 25 4 0 25 8 13 11 5 17 28 25 18 12 19 9 23 23 20 23 8 24 10 0 9 25 4 13 6 5 27 25 28 6 25 25 0 3 11 6 0 28 28 15 25 18 4 0 4 24 27 3 19 4 27 12 12 8 28 25 17 8 26 11 17 19 26 21 21 11 26 17 28 24 25 20 23 9 3 3 28 10 12 27 11 11 25 5 24 15 27 25 24 17 23 0 8 11 5 15 3 13 13 27 10 24 5 27 5 4 3 21 5 20 19 10 26 21 0 10 4 10 5 21 21 19 12 8 28 23 0 21 21 21 6 4 25 12 25 15 10 19 

p63

32495
0 0 1 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 0 1 1 0 
18 19 21 27 2 12 21 27 18 28 4 28 13 13 28 18 3 20 27 27 18 16 5 24 10 18 27 19 4 2 19 19 4 16 27 6 20 9 24 16 18 9 6 4 20 19 13 21 19 14 24 16 24 16 20 6 11 9 18 25 4 2 25 20 13 11 5 14 28 25 18 12 19 9 23 23 20 23 20 16 10 17 9 25 4 13 6 5 27 25 28 6 25 25 2 3 11 6 17 28 28 21 25 18 4 24 4 24 27 3 19 4 27 12 12 20 28 25 17 20 9 11 17 19 9 16 2 11 19 17 28 24 25 20 23 9 3 3 28 10 12 27 11 11 25 5 24 21 27 25 24 17 23 17 20 11 2 16 3 13 13 27 10 24 5 27 5 4 3 21 5 20 19 14 4 2 24 10 4 10 5 21 2 19 12 9 28 23 17 21 2 21 6 4 25 12 25 21 10 19 

p64

22885
1 0 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 
18 19 21 27 2 12 15 27 18 28 4 28 13 13 28 18 3 20 27 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 8 6 4 8 19 13 21 19 20 24 16 24 16 8 6 11 8 18 25 29 0 7 8 13 11 5 17 28 25 18 12 19 8 5 13 20 5 8 16 10 0 26 7 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 27 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 5 8 3 3 28 10 12 27 11 11 25 5 24 15 27 25 24 17 10 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 5 20 19 10 26 2 0 10 29 10 5 21 2 19 12 8 28 10 0 21 2 21 6 4 7 12 7 15 10 19 

p65

29929
1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 0 
18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 21 5 24 10 18 27 19 4 2 19 19 4 21 27 6 20 8 24 15 18 9 6 4 8 19 13 21 19 20 24 24 24 21 8 6 11 9 18 7 4 0 7 8 13 11 5 19 28 12 18 12 19 9 23 23 20 23 8 24 10 0 9 7 4 13 6 5 27 7 28 6 7 11 2 13 11 6 0 28 28 15 12 18 4 0 4 24 22 13 19 4 27 12 12 8 28 7 0 8 26 11 28 19 26 21 2 11 26 0 28 24 11 20 23 9 1 13 28 10 12 22 11 11 11 5 24 15 27 11 24 0 23 0 8 11 2 15 13 13 13 27 10 24 5 27 5 4 1 21 1 20 19 10 26 2 0 10 4 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19 

p66

47550
1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 
18 19 21 27 2 12 21 27 22 28 4 28 13 13 28 18 3 20 22 0 18 16 5 24 23 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 25 9 18 7 29 0 7 8 13 25 5 14 28 25 18 12 19 9 23 23 20 23 8 16 23 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 28 6 0 28 28 21 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 9 25 17 19 9 16 2 12 19 17 28 24 25 20 23 9 3 3 28 14 12 22 12 25 25 5 24 21 27 25 24 17 23 0 8 28 2 16 3 13 13 27 23 24 5 27 5 4 3 21 5 20 19 14 4 2 0 20 29 20 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 21 23 19 

p67

34082
0 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 
18 19 21 27 2 12 15 27 27 28 4 28 13 13 28 18 13 20 27 27 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 15 18 9 6 4 8 19 13 21 19 10 24 16 24 16 8 6 11 9 18 25 29 2 7 8 13 11 5 17 28 25 18 12 19 9 23 23 20 23 8 16 10 17 9 25 29 13 19 5 27 7 28 6 25 25 2 13 27 6 17 28 28 15 25 18 4 24 4 24 27 13 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 13 13 28 10 12 18 11 11 25 5 24 15 27 25 24 17 23 17 8 11 2 15 13 13 13 27 10 24 5 27 5 4 13 21 5 20 19 10 4 2 24 10 29 10 5 21 2 19 12 8 28 23 17 21 2 21 6 4 7 12 7 15 10 19 

p68

22853
1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 
18 19 21 27 21 12 15 27 22 28 4 28 13 13 28 18 3 20 22 0 18 16 5 24 10 18 27 19 29 21 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 0 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 21 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 5 15 3 13 13 27 10 24 5 27 5 4 3 21 5 20 19 10 4 21 0 10 29 10 5 21 21 19 12 8 28 23 0 21 21 21 6 4 7 12 7 15 10 19 

p69

30301
1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 
18 19 21 27 2 12 21 27 18 28 4 28 13 13 28 18 3 20 27 0 18 16 5 24 10 18 27 19 4 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 7 4 0 7 8 13 11 5 17 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 4 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 21 25 18 4 0 4 24 27 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 27 11 11 25 5 24 21 27 25 24 17 23 0 8 11 2 16 3 13 13 27 10 24 5 27 5 4 3 21 5 20 19 10 26 2 0 10 4 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 21 10 19 

p70

48976
1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 
7 19 21 27 2 12 15 27 22 28 4 28 13 1 28 7 1 20 22 0 27 16 5 24 10 27 27 19 29 2 19 19 4 16 27 6 20 8 24 16 7 9 6 4 8 19 13 21 19 20 24 16 24 16 8 6 11 9 22 7 29 0 7 8 13 11 5 17 28 25 7 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 13 11 6 0 28 28 15 25 7 4 0 4 24 22 13 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 1 13 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 13 13 13 27 10 24 5 27 5 4 1 21 1 20 19 10 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 

p71

34987
1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 0 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 21 23 24 10 18 27 19 29 2 19 19 4 21 27 6 20 9 24 15 18 9 6 4 20 19 13 21 19 20 24 24 24 21 20 6 11 9 18 7 29 0 7 20 13 11 23 17 28 25 18 12 19 9 23 23 20 23 20 24 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 20 28 7 17 20 9 11 17 19 9 21 2 11 19 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 20 11 2 15 3 13 13 27 10 24 23 27 23 4 3 21 1 20 19 10 4 2 0 10 29 10 2 21 2 19 12 9 28 23 0 21 2 21 6 4 7 12 7 15 10 19 

小结

从上述结果可以观察到,模拟退火算法得到的解几乎都比简单贪心算法(单次迭代)得到的解要好,但改进后的贪心算法得到的解在某些情况下甚至比模拟退火算法得到的解还要好,而且在某些情况下要好得多。这个结果倒是让我感到有些意外。不过在本项目中,模拟退火算法寻找邻域的方法还是比较简单,只有交换两个顾客和移动单一顾客两种方法,这可能会导致产生新解的数量较少,很难寻找到更优的结果;而且模拟退火算法的初始状态也是随机产生的,有可能在初始状态处于一个较差的位置,在有限的迭代步数内难以找到优势更大的局部解。对此,我有一些改进的思考:
(1)初始状态利用简单贪心算法求解,使得模拟退火算法的初始状态处于一个比较良好的位置
(2)增加邻域算法,例如像改进贪心算法,随机强制关闭某一工厂,然后将该工厂的所有顾客重新分配;或者直接抛弃现有的解,重新随机生成一个新的分配方案。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Here is a basic implementation of CVRP in Python using the Google OR-Tools library: ```python from ortools.constraint_solver import routing_enums_pb2 from ortools.constraint_solver import pywrapcp def create_data_model(): """Stores the data for the problem.""" data = {} data['distance_matrix'] = [ [0, 548, 776, 696, 582, 274, 502, 194, 308, 194, 536, 502], [548, 0, 684, 308, 194, 502, 730, 354, 696, 742, 1084, 594], [776, 684, 0, 992, 878, 502, 274, 810, 468, 742, 400, 1278], [696, 308, 992, 0, 114, 650, 878, 502, 844, 890, 1232, 514], [582, 194, 878, 114, 0, 536, 764, 388, 730, 776, 1118, 400], [274, 502, 502, 650, 536, 0, 228, 308, 194, 240, 582, 810], [502, 730, 274, 878, 764, 228, 0, 536, 194, 468, 354, 1016], [194, 354, 810, 502, 388, 308, 536, 0, 342, 388, 730, 468], [308, 696, 468, 844, 730, 194, 194, 342, 0, 274, 388, 810], [194, 742, 742, 890, 776, 240, 468, 388, 274, 0, 342, 650], [536, 1084, 400, 1232, 1118, 582, 354, 730, 388, 342, 0, 878], [502, 594, 1278, 514, 400, 810, 1016, 468, 810, 650, 878, 0] ] data['num_vehicles'] = 3 data['vehicle_capacities'] = [100, 100, 100] data['depot'] = 0 return data def print_solution(data, manager, routing, solution): """Prints solution on console.""" total_distance = 0 total_load = 0 for vehicle_id in range(data['num_vehicles']): index = routing.Start(vehicle_id) plan_output = 'Route for vehicle {}:\n'.format(vehicle_id) route_distance = 0 route_load = 0 while not routing.IsEnd(index): node_index = manager.IndexToNode(index) route_load += data['demands'][node_index] plan_output += ' {} Load({}) -> '.format(node_index, route_load) previous_index = index index = solution.Value(routing.NextVar(index)) route_distance += routing.GetArcCostForVehicle( previous_index, index, vehicle_id) plan_output += ' {} Load({})\n'.format(manager.IndexToNode(index), route_load) plan_output += 'Distance of the route: {}m\n'.format(route_distance) plan_output += 'Load of the route: {}\n'.format(route_load) print(plan_output) total_distance += route_distance total_load += route_load print('Total distance of all routes: {}m'.format(total_distance)) print('Total load of all routes: {}'.format(total_load)) def main(): """Entry point of the program.""" data = create_data_model() manager = pywrapcp.RoutingIndexManager(len(data['distance_matrix']), data['num_vehicles'], data['depot']) routing = pywrapcp.RoutingModel(manager) def distance_callback(from_index, to_index): """Returns the distance between the two nodes.""" from_node = manager.IndexToNode(from_index) to_node = manager.IndexToNode(to_index) return data['distance_matrix'][from_node][to_node] transit_callback_index = routing.RegisterTransitCallback(distance_callback) routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index) dimension_name = 'Capacity' routing.AddDimension( transit_callback_index, 0, # no slack 100, # vehicle maximum capacities True, # start cumul to zero dimension_name) capacity_dimension = routing.GetDimensionOrDie(dimension_name) for i, demand in enumerate(data['demands']): index = manager.NodeToIndex(i) capacity_dimension.SetDemand(index, demand) for vehicle_id in range(data['num_vehicles']): index = routing.Start(vehicle_id) capacity_dimension.CumulVar(index).SetRange(data['vehicle_capacities'][vehicle_id], data['vehicle_capacities'][vehicle_id]) search_parameters = pywrapcp.DefaultRoutingSearchParameters() search_parameters.first_solution_strategy = ( routing_enums_pb2.FirstSolutionStrategy.PARALLEL_CHEAPEST_INSERTION) solution = routing.SolveWithParameters(search_parameters) if solution: print_solution(data, manager, routing, solution) if __name__ == '__main__': main() ``` Note that this is just a basic implementation and can be modified to suit specific requirements and constraints of individual problem instances.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZTao-z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值