Package: scoptimize
SC OptimizeSupply Chain Optimization package in python using PuLP.SetupMake sure you have Python 3.6.x (or higher) installed on your system. You can download ithere.Installationpip install scoptimizeGetting StartedTechnical DocumentationTheTechnical Docscan be foundhere.Basic Usagefromscoptimize.networkimportModel,Node,Flowmodel=Model(name='MyModel')model.add_object(Node(name="Factory_1",origin=True,cashflow_per_unit=-1,max_units=15))model.add_object(Node(name="Customer_1",destination=True,min_units=10))model.add_object(Flow(name="Factory_1__Customer_1",cashflow_per_unit=-1,max_units=15,start='Factory_1',end='Customer_1'))model.solve()print(model.objective)#=> 20.0Advanced UsageInput:fromscoptimize.networkimportModel,Node,Flowfrompprintimportppmodel=Model(name='MyAdvancedModel')model.add_object(Node(name="F1",origin=True,cashflow_for_use=-8,cashflow_per_unit=-1,max_units=5))model.add_object(Node(name="F2",origin=True,cashflow_per_unit=-2,max_units=10))model.add_object(Node(name="W1",cashflow_per_unit=-1,max_units=10))model.add_object(Node(name="D1",destination=True,cashflow_per_unit=0,min_units=8,max_units=10))model.add_object(Flow(name="F1_W1",cashflow_per_unit=-1,max_units=15,start='F1',end='W1'))model.add_object(Flow(name="F2_W1",cashflow_per_unit=-1,max_units=15,start='F2',end='W1'))model.add_object(Flow(name="W1_D1",cashflow_per_unit=-1,max_units=15,start='W1',end='D1'))model.solve()pp(model.get_object_stats())Output:{'F1': {'name': 'F1',
        'class': 'Node',
        'origin': True,
        'destination': False,
        'inflows': 0.0,
        'outflows': 0.0,
        'reflows_in': 0.0,
        'reflows_out': 0.0,
        'use': 0.0,
        'variable_cashflow': -0.0,
        'fixed_cashflow': -0.0},
 'F2': {'name': 'F2',
        'class': 'Node',
        'origin': True,
        'destination': False,
        'inflows': 0.0,
        'outflows': 8.0,
        'reflows_in': 0.0,
        'reflows_out': 0.0,
        'use': 1.0,
        'variable_cashflow': -16.0,
        'fixed_cashflow': 0.0},
 'W1': {'name': 'W1',
        'class': 'Node',
        'origin': False,
        'destination': False,
        'inflows': 8.0,
        'outflows': 8.0,
        'reflows_in': 0.0,
        'reflows_out': 0.0,
        'use': 1.0,
        'variable_cashflow': -8.0,
        'fixed_cashflow': 0.0},
 'D1': {'name': 'D1',
        'class': 'Node',
        'origin': False,
        'destination': True,
        'inflows': 8.0,
        'outflows': 0,
        'reflows_in': 0.0,
        'reflows_out': 0.0,
        'use': 1.0,
        'variable_cashflow': 0.0,
        'fixed_cashflow': 0.0},
 'F1_W1': {'name': 'F1_W1',
           'class': 'Flow',
           'reflow': False,
           'start': 'F1',
           'end': 'W1',
           'flow': 0.0,
           'use': 1.0,
           'variable_cashflow': -0.0,
           'fixed_cashflow': 0.0},
 'F2_W1': {'name': 'F2_W1',
           'class': 'Flow',
           'reflow': False,
           'start': 'F2',
           'end': 'W1',
           'flow': 8.0,
           'use': 1.0,
           'variable_cashflow': -8.0,
           'fixed_cashflow': 0.0},
 'W1_D1': {'name': 'W1_D1',
           'class': 'Flow',
           'reflow': False,
           'start': 'W1',
           'end': 'D1',
           'flow': 8.0,
           'use': 1.0,
           'variable_cashflow': -8.0,
           'fixed_cashflow': 0.0}}TestingDocker:docker build . --tag scoptimize_docker_testdocker run scoptimize_docker_test bash ./test.shLocal:python3.11 -m virtualenv venvsource venv/bin/activatepip install -e ../test.sh