Esempio n. 1
0
def generate_random_MILPInstance(numVars=40,
                                 numCons=20,
                                 density=0.2,
                                 maxObjCoeff=10,
                                 maxConsCoeff=10,
                                 tightness=2,
                                 rand_seed=2):
    cs, vs, objective, A, b = GenerateRandomMIP(numVars=numVars,
                                                numCons=numCons,
                                                density=density,
                                                maxObjCoeff=maxObjCoeff,
                                                maxConsCoeff=maxConsCoeff,
                                                tightness=tightness,
                                                rand_seed=rand_seed)
    A = np.asmatrix(pd.DataFrame.from_dict(A).to_numpy())
    objective = CyLPArray(list(objective.values()))
    b = CyLPArray(b)
    l = CyLPArray([0] * len(vs))
    u = CyLPArray([maxObjCoeff] * len(vs))
    return MILPInstance(A=A,
                        b=b,
                        c=objective,
                        l=l,
                        u=u,
                        sense=['Max', '<='],
                        integerIndices=list(range(len(vs))),
                        numVars=len(vs))
Esempio n. 2
0
def generate_random_value_functions(num_probs=40, num_evals=40):
    for prob_num in range(num_probs):
        num_vars = 4
        num_constrs = 2
        density = np.random.uniform(.2, .8)
        max_obj_coef = np.random.randint(10, 100)
        max_const_coef = np.random.randint(10, 100)
        tightness = 15

        # get a random A and objective
        cs, vs, objective, A, b = GenerateRandomMIP(
            numVars=num_vars,
            numCons=num_constrs,
            density=density,
            maxObjCoeff=max_obj_coef,
            maxConsCoeff=max_const_coef,
            tightness=15)
        A = np.asmatrix(pd.DataFrame.from_dict(A).to_numpy())
        objective = CyLPArray(list(objective.values()))
        l = CyLPArray([0] * len(vs))
        u = CyLPArray([max_obj_coef] * len(vs))

        # make a new directory to save all these instances
        fldr = f'example_value_functions/instance_{prob_num}'
        os.mkdir(fldr)

        for eval_num in range(num_evals):
            # make a random b for each evaluation of this instance
            b = CyLPArray([
                np.random.randint(
                    int(num_vars * density * max_const_coef / tightness),
                    int(num_vars * density * max_const_coef / 1.5))
                for i in range(num_constrs)
            ])
            instance = MILPInstance(A=A,
                                    b=b,
                                    c=objective,
                                    l=l,
                                    u=u,
                                    sense=['Max', '<='],
                                    integerIndices=list(range(len(vs))),
                                    numVars=len(vs))
            for i in instance.integerIndices:
                instance.lp.setInteger(i)
            file = f'evaluation_{eval_num}'
            instance.lp.writeMps(f'{os.path.join(fldr, file)}.mps')