Exemplo n.º 1
0
 def test_make_canonical_2(self):
     self.tableau = tableau_2().get(optim="max")
     t = Optimization._to_canonical(self.tableau.table,
                                    self.tableau.base_var_indices)
     tbl = PlainTableau(t, self.tableau.var_names, self.tableau._model_vars,
                        self.tableau.base_var_indices)
     self.assertEqual(tbl.is_canonical(), True)
Exemplo n.º 2
0
    def test_example4(self):
        t = self.t3.get()
        tbl = PlainTableau(t.table,
                           var_names=self.var_names,
                           model_vars=['x_1', 'x_2'],
                           base_var_indices=[2, 3, 4])

        res = tbl.var_result(only_model_vars=True)
        # print(res)
        self.assertEqual(VariableValues.from_dict({'x_1': 0, 'x_2': 0}), res)
Exemplo n.º 3
0
    def test_step(self):
        t = self.t3.get()
        # print(t)
        t2, pp = Optimization.simplex_step(t.table)

        res = PlainTableau(
            t2,
            var_names=self.var_names,
            model_vars=['x_1', 'x_2'],
            base_var_indices=[0, 2, 3]).var_result(only_model_vars=True)

        self.assertEqual(VariableValues.from_dict({'x_1': 8.0, 'x_2': 0}), res)
Exemplo n.º 4
0
    def test_run_for_solution(self):
        t = self.tb.get()
        result_table, res_base_indices = Optimization(t)._full_simplex(
            t.var_names, t.base_var_indices)
        # Optimization.__init__(table). ...
        tabl = PlainTableau(result_table,
                            var_names=["x1", "x2", "_s_1", "_s_2", "_a_1"],
                            model_vars=['x1', 'x2'],
                            base_var_indices=res_base_indices)
        vv = tabl.var_result()

        self.assertEqual(vv._as_dict(), {'_a_1': 0.5, 'x1': 1.0})
Exemplo n.º 5
0
    def test_step_3(self):
        t = self.t3.get()
        t2, pp = Optimization.simplex_step(t.table)
        t3, pp = Optimization.simplex_step(t2)
        t4, pp = Optimization.simplex_step(t3)

        res = PlainTableau(
            t4,
            var_names=self.var_names,
            model_vars=['x_1', 'x_2'],
            base_var_indices=[0, 1, 4]).var_result(only_model_vars=True)
        self.assertEqual(
            VariableValues.from_dict({
                'x_1': 2.9999999999999996,
                'x_2': 12.0
            }), res)
Exemplo n.º 6
0
    def run(self):
        # INTIALIZE BASE SOLUTION (INDICES / COLUMN IN TABLE).
        tableau = self._tableau
        initial_solution = tableau.base_var_indices
        try:
            final_table, final_base = self._full_simplex(
                tableau.var_names, initial_solution)
        except UnboundedTableau:
            return "unbounded", tableau.table

        val = PlainTableau(
            final_table,
            var_names=tableau.var_names,
            model_vars=tableau._model_vars,
            base_var_indices=final_base).var_result(only_model_vars=True)

        return val, final_table
Exemplo n.º 7
0
    def get(self, optim="max"):

        constraint_idx_to_slack_var_idx, \
            constraint_idx_to_artificial_idx, \
            variable_descriptions = self.init_needed_variables()
        vnames = [name for idx, name, _ in variable_descriptions]

        base_var_idxs = []
        for constraint_idx, c in enumerate(self.constraints):

            # get slack variable (index) for constraint
            slack_var_idx = constraint_idx_to_slack_var_idx[constraint_idx]

            if isinstance(c, GreaterEqualThan):  # add artificial variable.
                artif_var_idx = constraint_idx_to_artificial_idx[
                    constraint_idx]
                # add artifvar to initial base
                base_var_idxs.append(artif_var_idx)
            elif isinstance(c, LessEqualThan):
                base_var_idxs.append(slack_var_idx)
                artif_var_idx = None
            else:
                raise AttributeError

            new_row = TableauBuilder._build_constraint(c, slack_var_idx,
                                                       artif_var_idx,
                                                       len(self._table[-1, :]))
            self._table[constraint_idx, :] = new_row

        bigm_indices = [
            indx for indx, name, typ_ in variable_descriptions
            if typ_ == "artificial"
        ]
        self._table = TableauBuilder._build_objective(self._table,
                                                      self.objective,
                                                      bigm_indices, optim,
                                                      self._big_m_value)

        return PlainTableau(
            self._table,
            var_names=vnames,
            model_vars=[vnames[i] for i in range(self.no_vars)],
            base_var_indices=base_var_idxs)
Exemplo n.º 8
0
 def test_variable_name(self):
     t = self.t3.get()
     res = PlainTableau(t.table, model_vars=['x_1',
                                             'x_2']).get_variable_names()
     self.assertEqual(['x1', 'x2'], res)