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