Example #1
0
def create_rows(depth, C_set):

    global TARGETS

    row_value = 0

    row_names = []

    row_values = []

    row_right_sides = []

    row_senses = ""

    num_features = get_num_features()

    data_size = get_data_size()

    num_leafs = 2**depth

    num_nodes = num_leafs - 1

    for r in range(data_size):  #constraint (1)

        for j in range(num_nodes):

            col_names = [
                "x_" + str(l) + "_" + str(r)
                for l in get_left_leafs(j, num_nodes)
            ]

            col_values = [-1 for l in get_left_leafs(j, num_nodes)]

            for i in range(num_features):

                for v in range(len(C_set[i])):

                    if get_feature_value(r, i) > C_set[i][v]:

                        col_names.append("rho_" + str(i) + "_" + str(j) + "_" +
                                         str(v))

                        col_values.append(-1)

            for j2 in get_parents(j, depth):

                for i in range(num_features):

                    for v in range(len(C_set[i])):

                        if get_feature_value(
                                r, i) <= C_set[i][v] and j in get_left_nodes(
                                    j2, num_nodes):

                            col_names.append("rho_" + str(i) + "_" + str(j2) +
                                             "_" + str(v))

                            col_values.append(1)

                        if get_feature_value(
                                r, i) > C_set[i][v] and j in get_right_nodes(
                                    j2, num_nodes):

                            col_names.append("rho_" + str(i) + "_" + str(j2) +
                                             "_" + str(v))

                            col_values.append(1)

            row_names.append("constraint_1_" + str(r) + "_" + str(j))

            row_values.append([col_names, col_values])

            row_right_sides.append(get_depth(j, num_nodes) - 2)

            row_senses = row_senses + "L"

            row_value = row_value + 1

    for r in range(data_size):  #constraint (1bis)

        for j in range(num_nodes):

            col_names = [
                "x_" + str(l) + "_" + str(r)
                for l in get_right_leafs(j, num_nodes)
            ]

            col_values = [-1 for l in get_right_leafs(j, num_nodes)]

            for i in range(num_features):

                for v in range(len(C_set[i])):

                    if get_feature_value(r, i) <= C_set[i][v]:

                        col_names.append("rho_" + str(i) + "_" + str(j) + "_" +
                                         str(v))

                        col_values.append(-1)

            for j2 in get_parents(j, depth):

                for i in range(num_features):

                    for v in range(len(C_set[i])):

                        if get_feature_value(
                                r, i) <= C_set[i][v] and j in get_left_nodes(
                                    j2, num_nodes):

                            col_names.append("rho_" + str(i) + "_" + str(j2) +
                                             "_" + str(v))

                            col_values.append(1)

                        if get_feature_value(
                                r, i) > C_set[i][v] and j in get_right_nodes(
                                    j2, num_nodes):

                            col_names.append("rho_" + str(i) + "_" + str(j2) +
                                             "_" + str(v))

                            col_values.append(1)

            row_names.append("constraint_1bis_" + str(r) + "_" + str(j))

            row_values.append([col_names, col_values])

            row_right_sides.append(get_depth(j, num_nodes) - 2)

            row_senses = row_senses + "L"

            row_value = row_value + 1

    for j in range(num_nodes):  #constraint (2)

        col_names, col_values = [], []

        for i in range(num_features):

            for v in range(len(C_set[i])):

                col_names.append("rho_" + str(i) + "_" + str(j) + "_" + str(v))

                col_values.append(1)

        row_names.append("constraint_2_" + str(j))

        row_values.append([col_names, col_values])

        row_right_sides.append(1)

        row_senses = row_senses + "E"

        row_value = row_value + 1

    for r in range(data_size):  #constraint (3)

        for l in range(num_leafs):

            col_names, col_values = [], []

            col_names.append("x_" + str(l) + "_" + str(r))  #x_{l,s}

            col_values.append(1)

            for t in range(get_num_targets()):

                if TARGETS[t] == get_target(r):

                    col_names.append("prediction_type_" + str(l) + "_" +
                                     str(t))

                    col_values.append(-1)

            col_names.append("row_error_" + str(r))

            col_values.append(-1)

            row_names.append("constraint_3_" + str(r) + "_" + str(l))

            row_values.append([col_names, col_values])

            row_right_sides.append(0)

            row_senses = row_senses + "L"

            row_value = row_value + 1

    for l in range(num_leafs):  #constraint (4)

        col_names = [
            "prediction_type_" + str(l) + "_" + str(t)
            for t in range(get_num_targets())
        ]

        col_values = [1 for t in range(get_num_targets())]

        row_names.append("constraint_4_" + str(l))

        row_values.append([col_names, col_values])

        row_right_sides.append(1)

        row_senses = row_senses + "E"

        row_value = row_value + 1

    for r in range(data_size):  #constraint (4)

        col_names = ["x_" + str(l) + "_" + str(r) for l in range(num_leafs)]

        col_values = [1 for l in range(num_leafs)]

        row_names.append("constraint_4_" + str(l))

        row_values.append([col_names, col_values])

        row_right_sides.append(1)

        row_senses = row_senses + "E"

        row_value = row_value + 1

    return row_names, row_values, row_right_sides, row_senses
def create_variables_pricing_all_at_once(depth, master_prob):

    var_value = 0

    var_names = []

    var_types = ""

    var_lb = []

    var_ub = []

    var_obj = []

    num_features = get_num_features()

    data_size = get_data_size()

    num_leafs = 2**depth

    num_nodes = num_leafs - 1

    #compute useful sums of dual values

    A_i_l, B_i_l = [[] for l in range(num_leafs)], [[]
                                                    for l in range(num_leafs)]

    for leaf in range(num_leafs):

        for i in range(num_features):

            s = 0

            for j in range(num_nodes):

                left_leaves = get_left_leafs(j, num_nodes)

                if leaf in left_leaves:

                    s = s + master_prob.solution.get_dual_values(
                        "constraint_15_" + str(i) + "_" + str(j) + "_" +
                        str(leaf))

                #print(s)

                if s > 0:

                    print(s)

                    input("STOP B")

            B_i_l[leaf].append(-s)

        for i in range(num_features):

            s = 0

            for j in range(num_nodes):

                right_leaves = get_right_leafs(j, num_nodes)

                if leaf in right_leaves:

                    s = s + master_prob.solution.get_dual_values(
                        "constraint_16_" + str(i) + "_" + str(j) + "_" +
                        str(leaf))

                #print(s)

                if s > 0:

                    print(s)

                    input("STOP A")

            A_i_l[leaf].append(-s)

    print("SUM DUALS :", A_i_l, " ", B_i_l)
    # z_{r,l}, main decision variables

    for leaf in range(num_leafs):

        #print("SUM0",sum([duals[constraint_indicators[2] + r2] + duals[constraint_indicators[4] + r2*num_leafs] for r2 in [0, 1, 4, 8, 11, 15, 16, 17, 18, 19, 21, 23, 24, 27, 28, 29]])+duals[constraint_indicators[3]])

        #print("SUM1",sum([duals[constraint_indicators[2] + r3] + duals[constraint_indicators[4] + r3*num_leafs + 1] for r3 in [2, 3, 5, 6, 7, 9, 10, 12, 13, 14, 20, 22, 25, 26]])+duals[constraint_indicators[3]+1])

        for r in range(data_size):

            var_names.append("row_" + str(leaf) + "_" + str(r))

            var_types = var_types + "B"

            var_lb.append(0)

            var_ub.append(1)

            #print(r,leaf,"C_{r,l} ",duals[constraint_indicators[2] + r] + duals[constraint_indicators[4] + r*num_leafs + leaf])

            var_obj.append(
                master_prob.solution.get_dual_values("constraint_17_" +
                                                     str(r)) +
                master_prob.solution.get_dual_values("constraint_19_" +
                                                     str(r) + "_" + str(leaf)))

            var_value = var_value + 1

    # kappa_{i,r,l}, indicate the min feature of row r

    for leaf in range(num_leafs):

        for i in range(num_features):

            for r in range(data_size):

                var_names.append("kappa_" + str(leaf) + "_" + str(r) + "_" +
                                 str(i))

                var_types = var_types + "B"

                var_lb.append(0)

                var_ub.append(1)

                var_obj.append(A_i_l[leaf][i] * get_feature_value(r, i))

                var_value = var_value + 1

    # omega_{i,r,l}, indicate the max feature of row r

    for leaf in range(num_leafs):

        for i in range(num_features):

            for r in range(data_size):

                var_names.append("omega_" + str(leaf) + "_" + str(r) + "_" +
                                 str(i))

                var_types = var_types + "B"

                var_lb.append(0)

                var_ub.append(1)

                var_obj.append(-B_i_l[leaf][i] * get_feature_value(r, i))

                var_value = var_value + 1

    return var_names, var_types, var_lb, var_ub, var_obj