python求解分支定界(branch-and-bound)问题使用pybnb基本架构

官方网址:https://github.com/ghackebeil/pybnb
官方文档:https://pybnb.readthedocs.io/en/stable/

安装依赖

首先pip安装必要依赖:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ pybnb
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ mpi4py

若安装 mpi4py报错,请参考:https://blog.csdn.net/weixin_35757704/article/details/109560703

代码

接下来运行这份代码,就可以开始了,自定义notify_xxx函数就可以了,最后运行一下可以打印各种参数

import pybnb


class Simple(pybnb.Problem):
    def __init__(self):
        self._xL, self._xU = 0, 1

    #
    # required methods
    #
    def sense(self):
        return pybnb.minimize

    def objective(self):
        return round(self._xU - self._xL, 3)

    def bound(self):
        return -(self._xU - self._xL) ** 2

    def save_state(self, node):
        node.state = (self._xL, self._xU)

    def load_state(self, node):
        (self._xL, self._xU) = node.state

    def branch(self):
        xL, xU = self._xL, self._xU
        xM = 0.5 * (xL + xU)
        child = pybnb.Node()
        child.state = (xL, xM)
        yield child
        child = pybnb.Node()
        child.state = (xM, xU)
        yield child

    #
    # optional methods
    #
    def notify_solve_begins(self,
                            comm,
                            worker_comm,
                            convergence_checker):
        pass

    def notify_new_best_node(self,
                             node,
                             current):
        pass

    def notify_solve_finished(self,
                              comm,
                              worker_comm,
                              results):
        pass


problem = Simple()
solver = pybnb.Solver()
results = solver.solve(problem,
                       absolute_gap=1e-8)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值