Non-linear समस्याओं को बदलना

Python में Optimization परिचय

Jasmin Ludolf

Content Developer

एक non-linear फ़ंक्शन को अधिकतम करें

  • कलाकार अधिकतम 16 पेंटिंग बनाता है, लागत $C(q) = \sqrt q$, जहाँ $q$ मात्रा है
  • उल्टा डिमांड $p=\frac{3}{\sqrt q}$, जहाँ $p$ कीमत है
  • $\max \Pi = pq - C=\frac{3}{\sqrt q}q-\sqrt q = 2\sqrt q$

$$\max 2\sqrt q$$

$$s.t. \ \ \ \ q\leq 16 $$

कैनवास पर पेंटिंग करती महिला

Python में Optimization परिचय

SciPy या PuLP?

  • SciPy: milp एक linear objective अपेक्षित करता है
  • PuLP:
model = LpProblem('Artist', LpMaximize)
q = LpVariable('q', lowBound=0, upBound=16)
model += 2 * q**(1/2)
--> 3 model += 2 * q**(1/2)

TypeError: unsupported operand type(s) for ** or pow(): 'LpVariable' and 'float'
Python में Optimization परिचय

Linearize करने के लिए substitution

  • प्रतिस्थापित करें $z = \sqrt q$
  • $\rightarrow$ $\Pi=2\sqrt q =2z$
  • $\rightarrow$ क्षमता बाधा $z^2\leq 16\Leftrightarrow z\leq 4$
model = LpProblem('Artist', LpMaximize)
z = LpVariable('z', lowBound=0, upBound=4, cat='Integer')
model += 2 * z

model.solve() print(f"Solution is {LpStatus[model.status]}.") print(f"The optimal number of paintings is {round(z.varValue**2)}.")
Solution is Optimal. 
The optimal number of paintings is 16.
Python में Optimization परिचय

निर्भर प्रोजेक्ट्स के साथ कैपिटल बजटिंग

समस्या विवरण

  • प्रोजेक्ट $A$, $B$, $C$; $B$ के लिए $A$ पूर्वापेक्षा है
  • लाभ क्रमशः $V$ = [250, 200, 300]
  • आवश्यक निवेश $I$ = [2000, 1900, 2500] और केवल $4600 उपलब्ध है

मॉडलिंग

  • $o_A$, $o_B$, $o_C$ बाइनरी वैरिएबल; प्रोजेक्ट चयन दर्शाएँ

$\max\ \ o_AV_A + o_Ao_BV_B + o_CV_C$

$s.t.\ \ \ \ o_AI_A + o_Ao_BI_B + o_CI_C\leq 4600$

बजट प्रबंधन आइकन

Python में Optimization परिचय

Linearization: बाइनरी का गुणनफल

  • $o_Ao_B=o_{AB}$ से बदलें
  • बाधाएँ जोड़ें
    • $o_{AB}\leq o_{A}$
    • $o_{AB}\leq o_{B}$
    • $o_{AB}\geq o_{A} + o_{B} -1$
  • समस्या घटकर रह जाती है

$$\max\ \ o_AV_A + o_{AB}V_B + o_CV_C$$

$$s.t.\ \ \ \ o_AI_A + o_{AB}I_B + o_CI_C\leq 4600$$

$$ o_{A} + o_{B} -1 \leq o_{AB}\leq o_{A}, o_{B}$$

Python में Optimization परिचय

ट्रेनिंग लागत के साथ resource allocation

  • 120 कार्य आवंटित करें ताकि लागत न्यूनतम हो
  • सीनियर ($S$), जूनियर ($J$) और इंटर्न ($I$)
  • इंटर्न ट्रेनिंग लागत $500
  • एक कार्य सुलझाने की लागत $c$ = [30, 40, 5]
  • वेक्टर $x$: इष्टतम आवंटित कार्य
  • बाइनरी $o$: क्या इंटर्न को ट्रेनिंग मिलती है
  • $TC = 30x_S+40x_J+(5x_I+500)o$

बड़े टू-डू लिस्ट के पास पेंसिल लिए व्यक्ति

Python में Optimization परिचय

Linearization: बाइनरी और continuous का गुणनफल

  • BigM विधि एक बड़ा संख्या M लाती है
  • गुणनफल को $z = (5x_I+500)o$ से बदलती है
  • लागू करती है
    • $-oM\leq z \leq oM$
    • $-(1-o)M \leq z- (5x_I+500)o \leq (1-o)M$
Python में Optimization परिचय

अभ्यास करते हैं!

Python में Optimization परिचय

Preparing Video For Download...