当前位置: 首页>>代码示例>>Python>>正文


Python pulp.LpStatusOptimal方法代码示例

本文整理汇总了Python中pulp.LpStatusOptimal方法的典型用法代码示例。如果您正苦于以下问题:Python pulp.LpStatusOptimal方法的具体用法?Python pulp.LpStatusOptimal怎么用?Python pulp.LpStatusOptimal使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在pulp的用法示例。


在下文中一共展示了pulp.LpStatusOptimal方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: _fill_solution_one_dmu

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def _fill_solution_one_dmu(self, dmu_code, model_solution):
        ''' Treats a special case when we want to solve a super efficiency
            model but have only one DMU.

            Args:
                dmu_code (str): DMU code for which the LP was solved.
                model_solution (Solution): object where solution for one DMU
                    will be written.
        '''
        model_solution.orientation = self._concrete_model.get_orientation()
        model_solution.add_lp_status(dmu_code, LpStatusOptimal)

        model_solution.add_efficiency_score(dmu_code, 1)
        model_solution.add_lambda_variables(dmu_code, dict())
        for category in self.input_data.input_categories:
            model_solution.add_input_dual(dmu_code, category, 0)
        for category in self.input_data.output_categories:
            model_solution.add_output_dual(dmu_code, category, 0)

        try:
            model_solution.add_VRS_dual(dmu_code, 0)
        except AttributeError:
            pass 
开发者ID:araith,项目名称:pyDEA,代码行数:25,代码来源:super_efficiency_model.py

示例2: is_efficient

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def is_efficient(self, dmu_code, lambda_variables=None):
        ''' Checks if a given DMU is efficient.

            Args:
                dmu_code (str): DMU code.
                lambda_variables (dict of str to double, optional): dictionary
                    that maps DMU codes to the corresponding value
                    of lambda variables. If it is not given, it will be loaded
                    from a pickled file.

            Returns:
                bool: True if a given DMU is efficient, False otherwise.
        '''
        if self.lp_status[dmu_code] != LpStatusOptimal:
            return False
        file_name = self._get_pickle_name(dmu_code)
        if not lambda_variables:
            lambda_variables = pickle.load(open(file_name, 'rb'))
        return is_efficient(self.get_efficiency_score(dmu_code),
                            lambda_variables.get(dmu_code, 0)) 
开发者ID:araith,项目名称:pyDEA,代码行数:22,代码来源:solution.py

示例3: test_solution_add_lambda_variables

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def test_solution_add_lambda_variables(data):
    s = Solution(data)
    s.add_lp_status('dmu_1', LpStatusOptimal)
    s.add_lp_status('dmu_4', LpStatusOptimal)
    s.add_efficiency_score('dmu_1', 0.5)
    s.add_efficiency_score('dmu_4', 0.9999999)
    s.add_lambda_variables('dmu_1', {'dmu_1': 0, 'dmu_4': 1.5})
    assert s.is_efficient(data._DMU_user_name_to_code['dmu1']) is False
    s.add_lambda_variables('dmu_4', {'dmu_1': 0, 'dmu_4': 1.5})
    assert s.is_efficient(data._DMU_user_name_to_code['dmu2']) is True
    l_vars = s.get_lambda_variables('dmu_1')
    assert len(l_vars) == 2
    assert l_vars['dmu_1'] == 0
    assert l_vars['dmu_4'] == 1.5
    with pytest.raises(ValueError) as excinfo:
        s.add_lambda_variables('dmu_1', {'dmu_1': 0, 'dmu_3': 1.5})
    assert str(excinfo.value) == 'DMU code dmu_3 does not exist' 
开发者ID:araith,项目名称:pyDEA,代码行数:19,代码来源:test_solution.py

示例4: check_if_category_is_within_price_ratio_constraints

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def check_if_category_is_within_price_ratio_constraints(model_solution, bounds):
    for (category_in_nom, category_in_denom), (lower_bound, upper_bound) in bounds.items():
        if lower_bound:
            for dmu_code in model_solution._input_data.DMU_codes:
                if model_solution.lp_status[dmu_code] == LpStatusOptimal:
                    dual_value = _get_proper_dual(
                        category_in_nom, model_solution, dmu_code)
                    dual_value_denom = _get_proper_dual(
                        category_in_denom, model_solution, dmu_code)
                    assert dual_value + WEIGHT_RESTRICTION_TOLERANCE >= lower_bound * dual_value_denom

        if upper_bound:
            for dmu_code in model_solution._input_data.DMU_codes:
                if model_solution.lp_status[dmu_code] == LpStatusOptimal:
                    dual_value = _get_proper_dual(
                        category_in_nom, model_solution, dmu_code)
                    dual_value_denom = _get_proper_dual(
                        category_in_denom, model_solution, dmu_code)
                    assert dual_value - WEIGHT_RESTRICTION_TOLERANCE <= upper_bound * dual_value_denom 
开发者ID:araith,项目名称:pyDEA,代码行数:21,代码来源:utils_for_tests.py

示例5: solve

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def solve(self):
        self.prob.solve(self.LP_SOLVER)
        if self.prob.status == LpStatusOptimal:
            result = []
            for variable in self.prob.variables():
                val = variable.value()
                if val is not None and round(val) == 1.0:
                    result.append(variable)
            return result
        else:
            raise SolverException('Unable to solve') 
开发者ID:DimaKudosh,项目名称:pydfs-lineup-optimizer,代码行数:13,代码来源:pulp_solver.py

示例6: _fill_solution

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def _fill_solution(self, dmu_code, model_solution):
        ''' Fills given solution with data calculated for one DMU.

            Args:
                dmu_code (str): DMU code for which the LP was solved.
                model_solution (Solution): object where solution for one DMU
                    will be written.
        '''
        model_solution.orientation = self._concrete_model.get_orientation()
        model_solution.add_lp_status(dmu_code, self.lp_model.status)

        if self.lp_model.status == pulp.LpStatusOptimal:
            lambda_variables = dict()
            for dmu in self.input_data.DMU_codes:
                var = self._variables.get(dmu, None)
                if (var is not None and var.varValue is not None and
                        abs(var.varValue) > ZERO_TOLERANCE):
                    lambda_variables[dmu] = var.varValue

            if self._should_add_efficiency:
                model_solution.add_efficiency_score(
                    dmu_code, self._concrete_model.process_obj_var
                    (pulp.value(self.lp_model.objective)))
                
            model_solution.add_lambda_variables(dmu_code, lambda_variables)
            self._process_duals(dmu_code, self.input_data.input_categories,
                                model_solution.add_input_dual)
            self._process_duals(dmu_code, self.input_data.output_categories,
                                model_solution.add_output_dual) 
开发者ID:araith,项目名称:pyDEA,代码行数:31,代码来源:envelopment_model_base.py

示例7: _fill_solution

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def _fill_solution(self, dmu_code, model_solution):
        ''' Fills given solution with data calculated for one DMU.

            Args:
                dmu_code (str): DMU code for which the LP was solved.
                model_solution (Solution): object where solution for one DMU
                    will be written.
        '''
        model_solution.orientation = self._concrete_model.get_orientation()
        model_solution.add_lp_status(dmu_code, self.lp_model.status)
        if self.lp_model.status == pulp.LpStatusOptimal:
            for input_category in self.input_data.input_categories:
                model_solution.add_input_dual(
                    dmu_code, input_category,
                    self._input_variables[input_category].varValue)

            for output_category in self.input_data.output_categories:
                model_solution.add_output_dual(
                    dmu_code, output_category,
                    self._output_variables[output_category].varValue)
            lambda_variables = dict()
            for dmu_constraint, dmu in self._dmu_constraint_names.items():
                if self.lp_model.constraints[dmu_constraint].pi is None:
                    self.lp_model.constraints[dmu_constraint].pi = 0
                # else:
                #     print(self.lp_model.constraints[dmu_constraint].pi)
                if (abs(self.lp_model.constraints[dmu_constraint].pi) >
                        ZERO_TOLERANCE):
                    lambda_variables[dmu] = self._concrete_model.process_dual_value(
                        self.lp_model.constraints[dmu_constraint].pi)
            lambda_var = lambda_variables.get(dmu_code, 0)
            model_solution.add_efficiency_score(
                dmu_code, self._get_efficiency_score(lambda_var))
            # print('lambda_variables: {0}'.format(lambda_variables))
            model_solution.add_lambda_variables(dmu_code, lambda_variables) 
开发者ID:araith,项目名称:pyDEA,代码行数:37,代码来源:multiplier_model_base.py

示例8: test_solution_lp_status

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def test_solution_lp_status(data):
    s = Solution(data)
    s.add_lp_status('dmu_1', LpStatusOptimal)
    assert s.lp_status['dmu_1'] == LpStatusOptimal
    with pytest.raises(ValueError) as excinfo:
        s.add_lp_status('dmu_3', LpStatusOptimal)
    assert str(excinfo.value) == 'DMU code dmu_3 does not exist'
    s.add_lp_status('dmu_1', 'Something')
    assert s.lp_status['dmu_1'] == 'Something' 
开发者ID:araith,项目名称:pyDEA,代码行数:11,代码来源:test_solution.py

示例9: _helper_function_for_checking_limits

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def _helper_function_for_checking_limits(category, model_solution,
                                         categories, bound, get_dual_func,
                                         bool_func,
                                         process_bound):
    if category in categories:
        for dmu_code in model_solution._input_data.DMU_codes:
            if model_solution.lp_status[dmu_code] == LpStatusOptimal:
                dual_value = get_dual_func(dmu_code, category)
                coeff = model_solution._input_data.coefficients[
                    dmu_code, category]
                bool_func(dual_value, process_bound(bound, coeff)) 
开发者ID:araith,项目名称:pyDEA,代码行数:13,代码来源:utils_for_tests.py

示例10: solve_lp

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def solve_lp(prob):
    """Solve LP, return min/max."""
    optimization_result = prob.solve()
    assert optimization_result == pulp.LpStatusOptimal
    optimal_value = pulp.value(prob.objective)

    return optimal_value 
开发者ID:flix-tech,项目名称:RevPy,代码行数:9,代码来源:lp_solve.py

示例11: optimize

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def optimize(self):
        """
        Default solver is 'cbc' unless solver is set to something else.
        You may need to provide a path for any of the solvers using 'path' argument.
        """

        if model_params['write_lp']:
            logger.info('Writing the lp file!')
            self.model.writeLP(self.model.name + '.lp')

        logger.info('Optimization starts!')
        _solver = pulp.PULP_CBC_CMD(keepFiles=model_params['write_log'],
                                    fracGap=model_params['mip_gap'],
                                    maxSeconds=model_params['time_limit'],
                                    msg=model_params['display_log'])

        if model_params['solver'] == 'gurobi':
            _solver = pulp.GUROBI(msg=model_params['write_log'],
                                  timeLimit=model_params['time_limit'],
                                  epgap=model_params['mip_gap'])
        elif model_params['solver'] == 'cplex':
            options = []
            if model_params['mip_gap']:
                set_mip_gap = "set mip tolerances mipgap {}".format(model_params['mip_gap'])
                options.append(set_mip_gap)
            _solver = pulp.CPLEX_CMD(keepFiles=model_params['write_log'],
                                     options=options, timelimit=model_params['time_limit'],
                                     msg=model_params['display_log'])
        elif model_params['solver'] == 'glpk':
            # Read more about glpk options: https://en.wikibooks.org/wiki/GLPK/Using_GLPSOL
            options = []
            if model_params['mip_gap']:
                set_mip_gap = "--mipgap {}".format(model_params['mip_gap'])
                options.append(set_mip_gap)
            if model_params['time_limit']:
                set_time_limit = "--tmlim {}".format(model_params['time_limit'])
                options.append(set_time_limit)
            _solver = pulp.GLPK_CMD(keepFiles=model_params['write_log'], options=options,
                                    msg=model_params['display_log'])

        self.model.solve(solver=_solver)

        if self.model.status == pulp.LpStatusOptimal:
            logger.info('The solution is optimal and the objective value '
                        'is ${:,.2f}'.format(pulp.value(self.model.objective)))

    # ================== Output ================== 
开发者ID:ekhoda,项目名称:optimization-tutorial,代码行数:49,代码来源:optimization_model_pulp.py

示例12: peel_the_onion_method

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def peel_the_onion_method(model):
    ''' Runs the peel the onion model and returns solution that corresponds to
        the first run and ranking of all DMUs.

        Args:
            model (ModelBase): DEA model that must be called in the peel
                the onion.

        Returns:
            tuple of Solution, dict of str to int, bool: tuple with the first
                solution of the problem, dictionary that maps DMU code to peel
                the onion rank, boolean value which is true if all peel the
                onion runs were successful, false otherwise.
    '''
    copy_of_dmu_codes = copy.deepcopy(model.input_data.DMU_codes)
    current_rank = 1
    ranks = dict()
    for dmu_code in model.input_data.DMU_codes:
        ranks[dmu_code] = 'Infeasible/unbounded'

    first_solution = None
    max_slack_solution = None
    while model.input_data.DMU_codes:
        solution = model.run()
        if current_rank == 1:
            first_solution = solution
            try:
                max_slack_solution = model.second_solution
            except AttributeError:
                pass
        dmus_to_remove = []
        not_efficient_dmus = []

        one_is_infeasible = False
        for dmu_code in model.input_data.DMU_codes:
            if solution.lp_status[dmu_code] != LpStatusOptimal:
                one_is_infeasible = True
            elif solution.is_efficient(dmu_code):
                ranks[dmu_code] = current_rank
                dmus_to_remove.append(dmu_code)
            else:
                not_efficient_dmus.append(dmu_code)

        if one_is_infeasible:
            restore_base(model, first_solution, copy_of_dmu_codes,
                         max_slack_solution)
            return first_solution, ranks, False
        for dmu_code in dmus_to_remove:
            model.input_data.DMU_codes.remove(dmu_code)
        if len(dmus_to_remove) == 0 and len(not_efficient_dmus) > 0:
            for dmu in not_efficient_dmus:
                ranks[dmu] = current_rank
            break
        current_rank += 1

    restore_base(model, first_solution, copy_of_dmu_codes, max_slack_solution)
    return first_solution, ranks, True 
开发者ID:araith,项目名称:pyDEA,代码行数:59,代码来源:peel_the_onion.py

示例13: create_sheet_onion_rank

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def create_sheet_onion_rank(self, work_sheet, solution, start_row_index,
                                params_str):
        ''' Writes information about peel the onion solution to a given output.

            Args:
                work_sheet: object that has name attribute and implements
                    write method, it actually writes data to some output
                    (like file, screen, etc.).
                solution (Solution): solution.
                start_row_index (int): initial row index (usually used to append
                    data to existing output).
                params_str (str): string that is usually written in the first
                    row.

            Returns:
                int: index of the last row where data were written plus 1.
        '''
        work_sheet.name = 'OnionRank'
        # in case of max_slacks and peel-the-onion we should not
        # write ranks twice
        if self.count < len(self.ranks):

            work_sheet.write(start_row_index, 0, params_str)
            work_sheet.write(
                start_row_index + 1, 0,
                'Tier / Rank is the run in which DMU became efficient')
            work_sheet.write(start_row_index + 2, 0, 'DMU')
            work_sheet.write(start_row_index + 2, 1, 'Efficiency')
            work_sheet.write(start_row_index + 2, 2, 'Tier / Rank')
            ordered_dmu_codes = solution._input_data.DMU_codes_in_added_order
            row_index = start_row_index + 3
            for dmu_code in ordered_dmu_codes:
                work_sheet.write(
                    row_index, 0,
                    solution._input_data.get_dmu_user_name(dmu_code))
                if solution.lp_status[dmu_code] == pulp.LpStatusOptimal:
                    work_sheet.write(row_index, 1,
                                     solution.get_efficiency_score(dmu_code))
                    work_sheet.write(row_index, 2,
                                     self.ranks[self.count][dmu_code])
                else:
                    work_sheet.write(
                        row_index, 1,
                        pulp.LpStatus[solution.lp_status[dmu_code]])
                row_index += 1
            self.count += 1
            return row_index
        return -1 
开发者ID:araith,项目名称:pyDEA,代码行数:50,代码来源:write_data_to_xls.py

示例14: create_sheet_efficiency_scores

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def create_sheet_efficiency_scores(self, work_sheet, solution,
                                       start_row_index, params_str):
        ''' Writes efficiency scores to a given output.

            Args:
                work_sheet: object that has name attribute and implements
                    write method, it actually writes data to some output
                    (like file, screen, etc.).
                solution (Solution): solution.
                start_row_index (int): initial row index (usually used to append
                    data to existing output).
                params_str (str): string that is usually written in the first
                    row.

            Returns:
                int: index of the last row where data were written plus 1.
        '''
        work_sheet.name = 'EfficiencyScores'

        work_sheet.write(start_row_index, 0, params_str)
        work_sheet.write(start_row_index + 1, 0, 'DMU')
        work_sheet.write(start_row_index + 1, 1, 'Efficiency')
        if self.categorical is not None:
            work_sheet.write(start_row_index + 1, 2,
                             'Categorical: {0}'.format(self.categorical))

        ordered_dmu_codes = solution._input_data.DMU_codes_in_added_order
        row_index = 0
        for count, dmu_code in enumerate(ordered_dmu_codes):
            row_index = start_row_index + count + 2
            work_sheet.write(
                row_index, 0, solution._input_data.get_dmu_user_name(dmu_code))
            if solution.lp_status[dmu_code] == pulp.LpStatusOptimal:
                work_sheet.write(
                    row_index, 1, solution.get_efficiency_score(dmu_code))
            else:
                work_sheet.write(
                    row_index, 1, pulp.LpStatus[solution.lp_status[dmu_code]])
            if self.categorical is not None:
                work_sheet.write(
                    row_index, 2,
                    int(solution._input_data.coefficients[
                        dmu_code, self.categorical]))
        return row_index 
开发者ID:araith,项目名称:pyDEA,代码行数:46,代码来源:write_data_to_xls.py

示例15: create_sheet_peers

# 需要导入模块: import pulp [as 别名]
# 或者: from pulp import LpStatusOptimal [as 别名]
def create_sheet_peers(work_sheet, solution, start_row_index, params_str):
    ''' Writes peers to a given output.

        Args:
            work_sheet: object that has name attribute and implements
                write method, it actually writes data to some output
                (like file, screen, etc.).
            solution (Solution): solution.
            start_row_index (int): initial row index (usually used to append
                data to existing output).
            params_str (str): string that is usually written in the first
                row.

        Returns:
            int: index of the last row where data were written plus 1.
    '''
    work_sheet.name = 'Peers'

    work_sheet.write(start_row_index, 0, params_str)
    work_sheet.write(start_row_index + 1, 0, 'DMU')
    work_sheet.write(start_row_index + 1, 2, 'Peer')
    work_sheet.write(start_row_index + 1, 3, 'Lambda')
    write_classification = False
    if bool(solution.return_to_scale):
        work_sheet.write(start_row_index + 1, 4, 'Classification')
        write_classification = True
        
    ordered_dmu_codes = solution._input_data.DMU_codes_in_added_order
    row_index = start_row_index + 2
    for dmu_code in ordered_dmu_codes:
        work_sheet.write(row_index, 0, solution._input_data.get_dmu_user_name(
            dmu_code))
        if solution.lp_status[dmu_code] == pulp.LpStatusOptimal:
            lambda_vars = solution.get_lambda_variables(dmu_code)
#            sum_of_lambda_values = 0
            once = True
#            for dmu, lambda_value in lambda_vars.items():
#                if lambda_value:
#                    sum_of_lambda_values += lambda_value
            
            for dmu, lambda_value in lambda_vars.items():
                if lambda_value:
                    dmu_name = solution._input_data.get_dmu_user_name(dmu)
                    work_sheet.write(row_index, 2, dmu_name)
                    work_sheet.write(row_index, 3, lambda_value)
                    if write_classification and once:
                        work_sheet.write(
                            row_index, 4, solution.return_to_scale[dmu_code]
                            #_calculate_frontier_classification(sum_of_lambda_values)
                                )

                        once = False
                    row_index += 1

        else:
            work_sheet.write(
                row_index, 2, pulp.LpStatus[solution.lp_status[dmu_code]])
        row_index += 1
    return row_index 
开发者ID:araith,项目名称:pyDEA,代码行数:61,代码来源:write_data_to_xls.py


注:本文中的pulp.LpStatusOptimal方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。