मैं एकाधिक चर का उपयोग करके भौतिक संपत्ति असाइन करने का प्रयास कर रहा हूं। उदाहरण के लिए; सामग्री_1, सामग्री_2 और सामग्री_3 के लिए घनत्व और चालकता दो निर्णय चर हैं।

मुझे निम्नलिखित जानकारी इनपुट करनी है:

density of material_1 = 1000
density of material_2 = 2000
density of material_3 = 1500

conductivity of material_1 = 250
conductivity of material_2 = 400
conductivity of material_3 = 100

प्योमो में चरों को परिभाषित करने के लिए मानक प्रारूप नीचे दिया गया है:

model.variable_1 = Var(bounds=(800,2000))

उपरोक्त कोड का अर्थ है वेरिएबल_1 एक वैरिएबल है जिसमें लोअर बाउंड = 800, और अपर बाउंड = 2000 है।

लेकिन हम वैरिएबल को बाउंड के बजाय विशिष्ट मानों के सेट के साथ कैसे परिभाषित कर सकते हैं?

विचार डेटा मानों को ऑप्टिमाइज़र में इनपुट करना है ताकि जब वह घनत्व मान चुनता है, तो उसे उसी सामग्री से चालकता मान भी चुनना चाहिए

हम ऐसी स्थिति को पायमो ढांचे में कैसे लगा सकते हैं? क्या कोई भी मेरी इस के साथ मदद कर सकता है?

4
Rua Goa 7 पद 2020, 20:50

1 उत्तर

सबसे बढ़िया उत्तर

इसलिए यदि आप कई विकल्पों में से एक का चयन कर रहे हैं, तो आप इसे एक पूर्णांक रैखिक कार्यक्रम के रूप में सेट कर सकते हैं। मूल सार यह है कि हम नीचे दिए गए उदाहरण में एक द्विआधारी चर x को सामग्री के चयन के कार्य का प्रतिनिधित्व करते हैं i, जहां i सामग्री के सेट का सदस्य है।

उपरोक्त आपके प्रश्न में, आप पैरामीटर को मॉडल (कीमत, घनत्व, चालकता, आदि) में अलग करने की अवधारणा के साथ संघर्ष कर रहे हैं, जो कि चर से मूल्य में निश्चित हैं। em> वे कौन से निर्णय हैं जिन्हें आप मॉडल बनाना चाहते हैं।

नीचे से थोड़ा अधिक उन्नत मॉडल एक मिश्रण मॉडल हो सकता है, जहां आप कुछ बाधाओं के भीतर विभिन्न सामग्रियों का अनुपात ले सकते हैं, जिसके लिए x के डोमेन को गैर-ऋणात्मक वास्तविक संख्या में बदलने की आवश्यकता होगी। यह सिर्फ चयन की द्विआधारी क्रिया का मॉडल है। बेशक इस तरह के एक मॉडल में, आप इसे सूची/शब्दकोश समझ या फ़िल्टर के साथ हल कर सकते हैं, इसलिए बीजगणितीय मॉडलिंग का उपयोग करना वास्तव में अधिक है, लेकिन यह उन अवधारणाओं को अलग करने का एक उदाहरण है जिनके बारे में आपने पूछा था।

# material selection model

import pyomo.environ as pyo

# data
materials = ['steel', 'alum', 'carbon', 'cheese']

density =   {   'steel' : 1.2,
                'alum'  : 0.8,
                'carbon': 1.8,
                'cheese': 0.7}

conductivity = {'steel' : 6.4,
                'alum'  : 3.1,
                'carbon': 4.4,
                'cheese': 0.3}

price =     {   'steel' : 2.3,
                'alum'  : 3.5,
                'carbon': 5.8,
                'cheese': 6.0}

m = pyo.ConcreteModel('material selector')

# SETS (used to index the decision variable and the parameters)
m.matl = pyo.Set(initialize=materials)

# VARIABLES
m.x = pyo.Var(m.matl, domain=pyo.Binary)   # a binary decision variable representing the selection of matl

# PARAMETERS
m.density = pyo.Param(m.matl, initialize=density)
m.conductivity = pyo.Param(m.matl, initialize=conductivity)
m.price = pyo.Param(m.matl, initialize=price)


# OBJ (minimize price)
m.obj = pyo.Objective(expr=sum(m.x[i] * m.price[i] for i in m.matl))

# Constraints
m.c1 = pyo.Constraint(expr=(sum(m.x[i] * m.density[i] for i in m.matl) >= 1.0))     # min density
m.c2 = pyo.Constraint(expr=(sum(m.x[i] * m.conductivity[i] for i in m.matl) <= 5.0)) # max cond.

# solve it
solver = pyo.SolverFactory('glpk')
result = solver.solve(m)
m.display()

उपज:

Model material selector

  Variables:
    x : Size=4, Index=matl
        Key    : Lower : Value : Upper : Fixed : Stale : Domain
          alum :     0 :   0.0 :     1 : False : False : Binary
        carbon :     0 :   1.0 :     1 : False : False : Binary
        cheese :     0 :   0.0 :     1 : False : False : Binary
         steel :     0 :   0.0 :     1 : False : False : Binary

  Objectives:
    obj : Size=1, Index=None, Active=True
        Key  : Active : Value
        None :   True :   5.8

  Constraints:
    c1 : Size=1
        Key  : Lower : Body : Upper
        None :   1.0 :  1.8 :  None
    c2 : Size=1
        Key  : Lower : Body : Upper
        None :  None :  4.4 :   5.0
1
AirSquid 7 पद 2020, 23:13