Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added the bounds on the logarithmic batch size variables. #39

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

AlbertLee125
Copy link
Member

@AlbertLee125 AlbertLee125 commented Jun 8, 2024

Fixes #30

I managed an issue batch_processing benchmark #30 by adding bounds on the variable.

The issue is commented at
#30

@ZedongPeng ZedongPeng linked an issue Jun 10, 2024 that may be closed by this pull request
@ZedongPeng
Copy link
Member

The black format check failed. @AlbertLee125

@bernalde
Copy link
Member

Those bounds seem not only arbitrary but extremely loose (remember that is the logarithm of the volume!). Try running FBBT to figure out reasonable bounds if not provided

@ZedongPeng
Copy link
Member

@ZedongPeng
Copy link
Member

@AlbertLee125
Copy link
Member Author

from pyomo.contrib.fbbt.fbbt import fbbt

def build_model():

if __name__ == "__main__":
    m = build_model()
    TransformationFactory('gdp.hull').apply_to(m)
    # m.pprint()
    fbbt(m)
    m.pprint()

I ran the fbbt and set up the new bounds for the batch_size_log.

@AlbertLee125
Copy link
Member Author

8 Var Declarations
    batchSize_log : Logarithmic Batch Size of the Products
        Size=100, Index=PRODUCTS*STAGES
        Key         : Lower               : Value : Upper             : Fixed : Stale : Domain
           ('A', 1) :  3.8362153518509365 :  None : 8.887566979713132 : False :  True :  Reals
           ('A', 2) :  3.5274798702013226 :  None : 9.259130536145614 : False :  True :  Reals
           ('A', 3) :   2.242281625952801 :  None : 8.303619091118177 : False :  True :  Reals
           ('A', 4) :    3.34089391462091 :  None :  8.36304251158898 : False :  True :  Reals
           ('A', 5) :   2.721854706214687 :  None : 8.143988945526294 : False :  True :  Reals
           ('A', 6) :  2.4499209907310453 :  None : 8.517193191416236 : False :  True :  Reals
           ('A', 7) :  3.1430681712909907 :  None :  8.34283980427146 : False :  True :  Reals
           ('A', 8) :    3.11131947297641 :  None : 9.856967536901234 : False :  True :  Reals
           ('A', 9) :  3.4150018867746326 :  None :  8.78912690689988 : False :  True :  Reals
          ('A', 10) :  3.6285759870726912 :  None : 8.448200319929285 : False :  True :  Reals
           ('B', 1) :     2.8090795362223 :  None :                10 : False :  True :  Reals
           ('B', 2) :  3.3303764598555867 :  None :                10 : False :  True :  Reals
           ('B', 3) :  3.3458806463915516 :  None :                10 : False :  True :  Reals
           ('B', 4) :   2.955683010414176 :  None : 8.728502285083444 : False :  True :  Reals
           ('B', 5) :   2.306987592425064 :  None : 9.210340371976182 : False :  True :  Reals
           ('B', 6) :  2.6372292792956413 :  None : 9.035986984831403 : False :  True :  Reals
           ('B', 7) :   3.122737095077342 :  None :                10 : False :  True :  Reals
           ('B', 8) :  2.3903692013641153 :  None : 9.163820356341288 : False :  True :  Reals
           ('B', 9) :   2.955683010414176 :  None : 9.615805480084347 : False :  True :  Reals
          ('B', 10) :  1.5693886492942855 :  None : 9.163820356341288 : False :  True :  Reals
           ('C', 1) :  1.6550251558792493 :  None :                10 : False :  True :  Reals
           ('C', 2) :  3.4955747892767364 :  None : 8.996766271678123 : False :  True :  Reals
           ('C', 3) :   2.878800587501365 :  None : 9.482274087459825 : False :  True :  Reals
           ('C', 4) :  3.2442603609958303 :  None : 8.671343871243495 : False :  True :  Reals
           ('C', 5) :  2.6482769288895325 :  None :  8.78912690689988 : False :  True :  Reals
           ('C', 6) :   3.479574447930295 :  None : 8.887566979713132 : False :  True :  Reals
           ('C', 7) :  2.7864272673703496 :  None : 8.671343871243495 : False :  True :  Reals
           ('C', 8) :   1.837346712673204 :  None : 8.565983355585669 : False :  True :  Reals
           ('C', 9) :   2.487934278814353 :  None : 8.493662694006042 : False :  True :  Reals
          ('C', 10) :  3.2842656956095295 :  None :                10 : False :  True :  Reals
           ('D', 1) :  2.7006161278730385 :  None : 8.404715207989547 : False :  True :  Reals
           ('D', 2) :  2.6360776067354674 :  None : 9.119368593770455 : False :  True :  Reals
           ('D', 3) :  2.7902282865627255 :  None : 9.482274087459825 : False :  True :  Reals
           ('D', 4) :   2.731387786539792 :  None : 8.959025943695275 : False :  True :  Reals
           ('D', 5) :  2.5670847352485158 :  None : 9.769956159911604 : False :  True :  Reals
           ('D', 6) :   2.761240749689473 :  None : 9.035986984831403 : False :  True :  Reals
           ('D', 7) :  2.9725498433566804 :  None : 8.591301163569959 : False :  True :  Reals
           ('D', 8) :  2.6021760550597857 :  None :                10 : False :  True :  Reals
           ('D', 9) :   3.362014610118403 :  None : 8.820875605214459 : False :  True :  Reals
          ('D', 10) :  2.3259226784316276 :  None : 8.194419799153186 : False :  True :  Reals
           ('E', 1) :  1.9932882550926923 :  None : 9.769956159911604 : False :  True :  Reals
           ('E', 2) :    2.16764164223747 :  None : 8.671343871243495 : False :  True :  Reals
           ('E', 3) :   2.686435435652638 :  None : 9.076808979351659 : False :  True :  Reals
           ('E', 4) :   2.532284755825379 :  None : 8.448200319929285 : False :  True :  Reals
           ('E', 5) :   2.559683730013494 :  None : 9.482274087459825 : False :  True :  Reals
           ('E', 6) :   2.039808270727585 :  None : 9.210340371976182 : False :  True :  Reals
           ('E', 7) :   2.880591450093595 :  None :                10 : False :  True :  Reals
           ('E', 8) : 0.33506017848916003 :  None : 8.517193191416236 : False :  True :  Reals
           ('E', 9) :   2.662337884073577 :  None : 9.210340371976182 : False :  True :  Reals
          ('E', 10) :  1.5137151748308062 :  None : 8.541290742995297 : False :  True :  Reals
           ('F', 1) :   2.584710957027937 :  None : 8.820875605214459 : False :  True :  Reals
           ('F', 2) :   2.742934962242831 :  None : 9.035986984831403 : False :  True :  Reals
           ('F', 3) :  1.2265874728747428 :  None : 8.448200319929285 : False :  True :  Reals
           ('F', 4) :   1.668420225153782 :  None : 9.689913452238068 : False :  True :  Reals
           ('F', 5) :   2.612881833994633 :  None : 8.758355248233125 : False :  True :  Reals
           ('F', 6) :  2.3251997615428524 :  None : 8.541290742995297 : False :  True :  Reals
           ('F', 7) :  2.3966587255249974 :  None : 9.615805480084347 : False :  True :  Reals
           ('F', 8) :   2.640280808182748 :  None :  9.95227771670556 : False :  True :  Reals
           ('F', 9) :  1.1088044372183594 :  None : 8.699514748210191 : False :  True :  Reals
          ('F', 10) :  1.7374130966407335 :  None :                10 : False :  True :  Reals
           ('G', 1) :  3.1206828751663576 :  None :  9.95227771670556 : False :  True :  Reals
           ('G', 2) :  3.6118034278530162 :  None : 9.163820356341288 : False :  True :  Reals
           ('G', 3) :  2.4981532618203657 :  None :                10 : False :  True :  Reals
           ('G', 4) :  2.0461681380773085 :  None : 8.517193191416236 : False :  True :  Reals
           ('G', 5) :  1.3530209575173633 :  None : 8.922658299524402 : False :  True :  Reals
           ('G', 6) :   3.257258410172109 :  None : 9.119368593770455 : False :  True :  Reals
           ('G', 7) :  1.9720601659235866 :  None : 8.303619091118177 : False :  True :  Reals
           ('G', 8) :  1.1988702776901048 :  None : 9.310423830533164 : False :  True :  Reals
           ('G', 9) :  2.8728467112617766 :  None : 8.996766271678123 : False :  True :  Reals
          ('G', 10) :   2.451633246185473 :  None : 9.856967536901234 : False :  True :  Reals
           ('H', 1) :  3.0711689322921174 :  None : 9.035986984831403 : False :  True :  Reals
           ('H', 2) :   2.534864223225142 :  None : 9.856967536901234 : False :  True :  Reals
           ('H', 3) :  2.4330815289151992 :  None : 8.284570896147484 : False :  True :  Reals
           ('H', 4) :   1.808927219842206 :  None : 8.996766271678123 : False :  True :  Reals
           ('H', 5) :   2.566612921539722 :  None :  8.64394489705538 : False :  True :  Reals
           ('H', 6) :   3.211750882913307 :  None : 8.565983355585669 : False :  True :  Reals
           ('H', 7) :   0.710314931174096 :  None : 9.163820356341288 : False :  True :  Reals
           ('H', 8) :   2.764438664869642 :  None : 8.758355248233125 : False :  True :  Reals
           ('H', 9) :   2.396713884744325 :  None : 8.959025943695275 : False :  True :  Reals
          ('H', 10) :   2.814449085444304 :  None : 8.728502285083444 : False :  True :  Reals
          ('HH', 1) :  2.5779113698987484 :  None : 9.076808979351659 : False :  True :  Reals
          ('HH', 2) :  3.2710585504586938 :  None : 9.035986984831403 : False :  True :  Reals
          ('HH', 3) :  2.7855507346769928 :  None : 8.959025943695275 : False :  True :  Reals
          ('HH', 4) :   2.846175356493428 :  None :  8.78912690689988 : False :  True :  Reals
          ('HH', 5) :  3.1040044657955277 :  None : 9.119368593770455 : False :  True :  Reals
          ('HH', 6) :  1.7177101046756373 :  None :  9.42164946564339 : False :  True :  Reals
          ('HH', 7) :   3.582494708918582 :  None : 8.303619091118177 : False :  True :  Reals
          ('HH', 8) :  2.5386906567454672 :  None : 8.404715207989547 : False :  True :  Reals
          ('HH', 9) :   2.753802036362413 :  None : 8.996766271678123 : False :  True :  Reals
         ('HH', 10) :  1.5170394092134858 :  None : 9.615805480084347 : False :  True :  Reals
         ('HHH', 1) :  1.8167020491921215 :  None : 8.959025943695275 : False :  True :  Reals
         ('HHH', 2) :  2.9347324237173327 :  None : 8.758355248233125 : False :  True :  Reals
         ('HHH', 3) :    2.59440661778013 :  None : 8.470673175781343 : False :  True :  Reals
         ('HHH', 4) :  2.2415852431573873 :  None : 8.996766271678123 : False :  True :  Reals
         ('HHH', 5) :  2.9347324237173327 :  None :  8.64394489705538 : False :  True :  Reals
         ('HHH', 6) :  2.2415852431573873 :  None :                10 : False :  True :  Reals
         ('HHH', 7) :   2.915314337860231 :  None : 8.959025943695275 : False :  True :  Reals
         ('HHH', 8) :   3.390207952400159 :  None : 8.127728424654514 : False :  True :  Reals
         ('HHH', 9) :   1.381383977934276 :  None :  8.78912690689988 : False :  True :  Reals
        ('HHH', 10) :  2.3507845351223793 :  None : 8.728502285083444 : False :  True :  Reals

This is the output of the logramithic size of the batch. I think I can set up the bounds of the Logarithmic Batch Size of the Products from 0 to 10.

@AlbertLee125
Copy link
Member Author

model.batchSize_log = Var(
        model.PRODUCTS, model.STAGES, bounds=(0,10), doc='Logarithmic Batch Size of the Products'
    )

I have tightened this bound.

@ZedongPeng
Copy link
Member

Hi @AlbertLee125 . We can run FBBT multiple times to further tighten the bound.

@AlbertLee125
Copy link
Member Author

8 Var Declarations
    batchSize_log : Logarithmic Batch Size of the Products
        Size=100, Index=PRODUCTS*STAGES
        Key         : Lower               : Value : Upper             : Fixed : Stale : Domain
           ('A', 1) :  3.8362153518509365 :  None : 8.887566979713132 : False :  True :  Reals
           ('A', 2) :  3.5274798702013226 :  None : 9.259130536145614 : False :  True :  Reals
           ('A', 3) :   2.242281625952801 :  None : 8.303619091118177 : False :  True :  Reals
           ('A', 4) :    3.34089391462091 :  None :  8.36304251158898 : False :  True :  Reals
           ('A', 5) :   2.721854706214687 :  None : 8.143988945526294 : False :  True :  Reals
           ('A', 6) :  2.4499209907310453 :  None : 8.517193191416236 : False :  True :  Reals
           ('A', 7) :  3.1430681712909907 :  None :  8.34283980427146 : False :  True :  Reals
           ('A', 8) :    3.11131947297641 :  None : 9.856967536901234 : False :  True :  Reals
           ('A', 9) :  3.4150018867746326 :  None :  8.78912690689988 : False :  True :  Reals
          ('A', 10) :  3.6285759870726912 :  None : 8.448200319929285 : False :  True :  Reals
           ('B', 1) :     2.8090795362223 :  None :                10 : False :  True :  Reals
           ('B', 2) :  3.3303764598555867 :  None :                10 : False :  True :  Reals
           ('B', 3) :  3.3458806463915516 :  None :                10 : False :  True :  Reals
           ('B', 4) :   2.955683010414176 :  None : 8.728502285083444 : False :  True :  Reals
           ('B', 5) :   2.306987592425064 :  None : 9.210340371976182 : False :  True :  Reals
           ('B', 6) :  2.6372292792956413 :  None : 9.035986984831403 : False :  True :  Reals
           ('B', 7) :   3.122737095077342 :  None :                10 : False :  True :  Reals
           ('B', 8) :  2.3903692013641153 :  None : 9.163820356341288 : False :  True :  Reals
           ('B', 9) :   2.955683010414176 :  None : 9.615805480084347 : False :  True :  Reals
          ('B', 10) :  1.5693886492942855 :  None : 9.163820356341288 : False :  True :  Reals
           ('C', 1) :  1.6550251558792493 :  None :                10 : False :  True :  Reals
           ('C', 2) :  3.4955747892767364 :  None : 8.996766271678123 : False :  True :  Reals
           ('C', 3) :   2.878800587501365 :  None : 9.482274087459825 : False :  True :  Reals
           ('C', 4) :  3.2442603609958303 :  None : 8.671343871243495 : False :  True :  Reals
           ('C', 5) :  2.6482769288895325 :  None :  8.78912690689988 : False :  True :  Reals
           ('C', 6) :   3.479574447930295 :  None : 8.887566979713132 : False :  True :  Reals
           ('C', 7) :  2.7864272673703496 :  None : 8.671343871243495 : False :  True :  Reals
           ('C', 8) :   1.837346712673204 :  None : 8.565983355585669 : False :  True :  Reals
           ('C', 9) :   2.487934278814353 :  None : 8.493662694006042 : False :  True :  Reals
          ('C', 10) :  3.2842656956095295 :  None :                10 : False :  True :  Reals
           ('D', 1) :  2.7006161278730385 :  None : 8.404715207989547 : False :  True :  Reals
           ('D', 2) :  2.6360776067354674 :  None : 9.119368593770455 : False :  True :  Reals
           ('D', 3) :  2.7902282865627255 :  None : 9.482274087459825 : False :  True :  Reals
           ('D', 4) :   2.731387786539792 :  None : 8.959025943695275 : False :  True :  Reals
           ('D', 5) :  2.5670847352485158 :  None : 9.769956159911604 : False :  True :  Reals
           ('D', 6) :   2.761240749689473 :  None : 9.035986984831403 : False :  True :  Reals
           ('D', 7) :  2.9725498433566804 :  None : 8.591301163569959 : False :  True :  Reals
           ('D', 8) :  2.6021760550597857 :  None :                10 : False :  True :  Reals
           ('D', 9) :   3.362014610118403 :  None : 8.820875605214459 : False :  True :  Reals
          ('D', 10) :  2.3259226784316276 :  None : 8.194419799153186 : False :  True :  Reals
           ('E', 1) :  1.9932882550926923 :  None : 9.769956159911604 : False :  True :  Reals
           ('E', 2) :    2.16764164223747 :  None : 8.671343871243495 : False :  True :  Reals
           ('E', 3) :   2.686435435652638 :  None : 9.076808979351659 : False :  True :  Reals
           ('E', 4) :   2.532284755825379 :  None : 8.448200319929285 : False :  True :  Reals
           ('E', 5) :   2.559683730013494 :  None : 9.482274087459825 : False :  True :  Reals
           ('E', 6) :   2.039808270727585 :  None : 9.210340371976182 : False :  True :  Reals
           ('E', 7) :   2.880591450093595 :  None :                10 : False :  True :  Reals
           ('E', 8) : 0.33506017848916003 :  None : 8.517193191416236 : False :  True :  Reals
           ('E', 9) :   2.662337884073577 :  None : 9.210340371976182 : False :  True :  Reals
          ('E', 10) :  1.5137151748308062 :  None : 8.541290742995297 : False :  True :  Reals
           ('F', 1) :   2.584710957027937 :  None : 8.820875605214459 : False :  True :  Reals
           ('F', 2) :   2.742934962242831 :  None : 9.035986984831403 : False :  True :  Reals
           ('F', 3) :  1.2265874728747428 :  None : 8.448200319929285 : False :  True :  Reals
           ('F', 4) :   1.668420225153782 :  None : 9.689913452238068 : False :  True :  Reals
           ('F', 5) :   2.612881833994633 :  None : 8.758355248233125 : False :  True :  Reals
           ('F', 6) :  2.3251997615428524 :  None : 8.541290742995297 : False :  True :  Reals
           ('F', 7) :  2.3966587255249974 :  None : 9.615805480084347 : False :  True :  Reals
           ('F', 8) :   2.640280808182748 :  None :  9.95227771670556 : False :  True :  Reals
           ('F', 9) :  1.1088044372183594 :  None : 8.699514748210191 : False :  True :  Reals
          ('F', 10) :  1.7374130966407335 :  None :                10 : False :  True :  Reals
           ('G', 1) :  3.1206828751663576 :  None :  9.95227771670556 : False :  True :  Reals
           ('G', 2) :  3.6118034278530162 :  None : 9.163820356341288 : False :  True :  Reals
           ('G', 3) :  2.4981532618203657 :  None :                10 : False :  True :  Reals
           ('G', 4) :  2.0461681380773085 :  None : 8.517193191416236 : False :  True :  Reals
           ('G', 5) :  1.3530209575173633 :  None : 8.922658299524402 : False :  True :  Reals
           ('G', 6) :   3.257258410172109 :  None : 9.119368593770455 : False :  True :  Reals
           ('G', 7) :  1.9720601659235866 :  None : 8.303619091118177 : False :  True :  Reals
           ('G', 8) :  1.1988702776901048 :  None : 9.310423830533164 : False :  True :  Reals
           ('G', 9) :  2.8728467112617766 :  None : 8.996766271678123 : False :  True :  Reals
          ('G', 10) :   2.451633246185473 :  None : 9.856967536901234 : False :  True :  Reals
           ('H', 1) :  3.0711689322921174 :  None : 9.035986984831403 : False :  True :  Reals
           ('H', 2) :   2.534864223225142 :  None : 9.856967536901234 : False :  True :  Reals
           ('H', 3) :  2.4330815289151992 :  None : 8.284570896147484 : False :  True :  Reals
           ('H', 4) :   1.808927219842206 :  None : 8.996766271678123 : False :  True :  Reals
           ('H', 5) :   2.566612921539722 :  None :  8.64394489705538 : False :  True :  Reals
           ('H', 6) :   3.211750882913307 :  None : 8.565983355585669 : False :  True :  Reals
           ('H', 7) :   0.710314931174096 :  None : 9.163820356341288 : False :  True :  Reals
           ('H', 8) :   2.764438664869642 :  None : 8.758355248233125 : False :  True :  Reals
           ('H', 9) :   2.396713884744325 :  None : 8.959025943695275 : False :  True :  Reals
          ('H', 10) :   2.814449085444304 :  None : 8.728502285083444 : False :  True :  Reals
          ('HH', 1) :  2.5779113698987484 :  None : 9.076808979351659 : False :  True :  Reals
          ('HH', 2) :  3.2710585504586938 :  None : 9.035986984831403 : False :  True :  Reals
          ('HH', 3) :  2.7855507346769928 :  None : 8.959025943695275 : False :  True :  Reals
          ('HH', 4) :   2.846175356493428 :  None :  8.78912690689988 : False :  True :  Reals
          ('HH', 5) :  3.1040044657955277 :  None : 9.119368593770455 : False :  True :  Reals
          ('HH', 6) :  1.7177101046756373 :  None :  9.42164946564339 : False :  True :  Reals
          ('HH', 7) :   3.582494708918582 :  None : 8.303619091118177 : False :  True :  Reals
          ('HH', 8) :  2.5386906567454672 :  None : 8.404715207989547 : False :  True :  Reals
          ('HH', 9) :   2.753802036362413 :  None : 8.996766271678123 : False :  True :  Reals
         ('HH', 10) :  1.5170394092134858 :  None : 9.615805480084347 : False :  True :  Reals
         ('HHH', 1) :  1.8167020491921215 :  None : 8.959025943695275 : False :  True :  Reals
         ('HHH', 2) :  2.9347324237173327 :  None : 8.758355248233125 : False :  True :  Reals
         ('HHH', 3) :    2.59440661778013 :  None : 8.470673175781343 : False :  True :  Reals
         ('HHH', 4) :  2.2415852431573873 :  None : 8.996766271678123 : False :  True :  Reals
         ('HHH', 5) :  2.9347324237173327 :  None :  8.64394489705538 : False :  True :  Reals
         ('HHH', 6) :  2.2415852431573873 :  None :                10 : False :  True :  Reals
         ('HHH', 7) :   2.915314337860231 :  None : 8.959025943695275 : False :  True :  Reals
         ('HHH', 8) :   3.390207952400159 :  None : 8.127728424654514 : False :  True :  Reals
         ('HHH', 9) :   1.381383977934276 :  None :  8.78912690689988 : False :  True :  Reals
        ('HHH', 10) :  2.3507845351223793 :  None : 8.728502285083444 : False :  True :  Reals

Running the fbbt for 200 times I think setting the bounds from 0 to 10 is the best I can do.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

batch_processing benchmark
3 participants