ITPub博客

首页 > 数据库 > 数据库开发技术 > OR-tools使用介绍(一)

OR-tools使用介绍(一)

原创 数据库开发技术 作者:derekwh 时间:2022-05-11 23:59:55 0 删除 编辑

         Or-tools是谷歌人工智能系列的运筹优化包,非常良心的开源工具包了。OR-Tools是一个用于优化的开源软件套件,专为解决世界上最棘手的车辆路线问题、流程优化、整数和线性规划以及约束规划等问题。

业内使用举例

算法在哈罗顺风车中的应用

原文链接:

https://mp.weixin.qq.com/s/VZjEAzGkrhnEtAK2INNSgg

仿真软件Anylogic培训课程 原文链接:

https://mp.weixin.qq.com/s/wueSqQEwEqg9Cnw9zRSPoQ

基础使用介绍

1.线性规划

约束条件:

目标函数:max(3x+4y)

#约束规划
from ortools.linear_solver import pywraplp
def LinearProgrammingExample():
    """Linear programming sample."""
    # Instantiate a Glop solver, naming it LinearExample.
    solver = pywraplp.Solver.CreateSolver('GLOP')
    # Create the two variables and let them take on any non-negative value.
    x = solver.NumVar(0, solver.infinity(), 'x')
    y = solver.NumVar(0, solver.infinity(), 'y')
    print('Number of variables =', solver.NumVariables())
    # Constraint 0: x + 2y <= 14.
    solver.Add(x + 2 * y <= 14.0)
    # Constraint 1: 3x - y >= 0.
    solver.Add(3 * x - y >= 0.0)
    # Constraint 2: x - y <= 2.
    solver.Add(x - y <= 2.0)
    print('Number of constraints =', solver.NumConstraints())
    # Objective function: 3x + 4y.
    solver.Maximize(3 * x + 4 * y)
    # Solve the system.
    status = solver.Solve()
    if status == pywraplp.Solver.OPTIMAL:
        print('Solution:')
        print('Objective value =', solver.Objective().Value())
        print('x =', x.solution_value())
        print('y =', y.solution_value())
    else:
        print('The problem does not have an optimal solution.')
    print('\nAdvanced usage:')
    print('Problem solved in %f milliseconds' % solver.wall_time())
    print('Problem solved in %d iterations' % solver.iterations())
LinearProgrammingExample()

2.背包问题

有50件商品, 价格如下:360, 83, 59, 130, 431, 67, 230, 52, 93, 125, 670, 892, 600, 38, 48, 147,78, 256, 63, 17, 120, 164, 432, 35, 92, 110, 22, 42, 50, 323, 514, 28,87, 73, 78, 15, 26, 78, 210, 36, 85, 189, 274, 43, 33, 10, 19, 389, 276,312

体积如下:7, 0, 30, 22, 80, 94, 11, 81, 70, 64, 59, 18, 0, 36, 3, 8, 15, 42, 9, 0,42, 47, 52, 32, 26, 48, 55, 6, 29, 84, 2, 4, 18, 56, 7, 29, 93, 44, 71,3, 86, 66, 31, 65, 0, 79, 20, 65, 52, 13

背包最大装载体积为850

from ortools.algorithms import pywrapknapsack_solver
def main():
    # Create the solver.
    solver = pywrapknapsack_solver.KnapsackSolver(
        pywrapknapsack_solver.KnapsackSolver.
        KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER, 'KnapsackExample')
    values = [
        360, 83, 59, 130, 431, 67, 230, 52, 93, 125, 670, 892, 600, 38, 48, 147,
        78, 256, 63, 17, 120, 164, 432, 35, 92, 110, 22, 42, 50, 323, 514, 28,
        87, 73, 78, 15, 26, 78, 210, 36, 85, 189, 274, 43, 33, 10, 19, 389, 276,
        312
    ]
    weights = [[
        7, 0, 30, 22, 80, 94, 11, 81, 70, 64, 59, 18, 0, 36, 3, 8, 15, 42, 9, 0,
        42, 47, 52, 32, 26, 48, 55, 6, 29, 84, 2, 4, 18, 56, 7, 29, 93, 44, 71,
        3, 86, 66, 31, 65, 0, 79, 20, 65, 52, 13
    ]]
    capacities = [850]
    solver.Init(values, weights, capacities)
    computed_value = solver.Solve()
    packed_items = []
    packed_weights = []
    total_weight = 0
    print('Total value =', computed_value)
    for i in range(len(values)):
        if solver.BestSolutionContains(i):
            packed_items.append(i)
            packed_weights.append(weights[0][i])
            total_weight += weights[0][i]
    print('Total weight:', total_weight)
    print('Packed items:', packed_items)
    print('Packed_weights:', packed_weights)
if __name__ == '__main__':
    main()

   未完待续.....


原文作者:Python学习杂记;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
央企算法工程师,微信公众号: python数智工坊

注册时间:2021-03-14

  • 博文量
    305
  • 访问量
    162339