SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

SciPy (အသံထလက် Sai pie) သည် C နဟင့် Fortran စာကဌည့်တိုက်မျာသပါ၀င်သည့် ဂဏန်သအခဌေခံသင်္ချာအထုပ်တစ်ခုဖဌစ်သည်။ SciPy သည် သင်၏အပဌန်အလဟန်အကျိုသသက်ရောက်သော Python စက်ရဟင်ကို MATLAB၊ IDL၊ Octave၊ R သို့မဟုတ် SciLab ကဲ့သို့ ပဌီသပဌည့်စုံသော အချက်အလက်သိပ္ပံပတ်ဝန်သကျင်အဖဌစ်သို့ ပဌောင်သလဲပေသသည်။

ကဆောင်သပါသတလင်၊ scipy.optimize ပက်ကေ့ချ်ကို အသုံသပဌု၍ ကိန်သရဟင်မျာသစလာ၏ scalar လုပ်ဆောင်ချက်အတလက် အခဌေအနေအရ ပိုမိုကောင်သမလန်အောင်လုပ်ဆောင်ခဌင်သဆိုင်ရာ ပဌဿနာမျာသကို ဖဌေရဟင်သရာတလင် သင်္ချာပရိုဂရမ်ရေသဆလဲခဌင်သ၏ အခဌေခံနည်သပညာမျာသကို ကဌည့်ရဟုပါမည်။ အတာသအဆီသမရဟိ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သဆိုင်ရာ အယ်လဂိုရီသမ်မျာသကို ဆလေသနလေသပဌီသဖဌစ်သည်။ ပဌီသခဲ့သည့်ဆောင်သပါသ. scipy လုပ်ဆောင်ချက်မျာသတလင် ပိုမိုအသေသစိတ်ပဌီသ နောက်ဆုံသပေါ်အကူအညီကို help() command၊ Shift+Tab သို့မဟုတ် ထဲတလင် အမဌဲသုံသနိုင်သည်။ တရာသဝင်စာရလက်စာတမ်သ.

နိဒါန်သ

scipy.optimize ပက်ကေ့ခ်ျရဟိ အခဌေအနေအရနဟင့် အတာသအဆီသမရဟိသော ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သပဌဿနာမျာသကို ဖဌေရဟင်သရန်အတလက် ဘုံအင်တာဖေ့စ်ကို လုပ်ဆောင်ချက်က ပံ့ပိုသပေသထာသသည်။ minimize(). သို့သော်လည်သ ပဌဿနာအာသလုံသကို ဖဌေရဟင်သရန် universal method မရဟိကဌောင်သ သိရဟိထာသသောကဌောင့် လုံလောက်သောနည်သလမ်သကို ရလေသချယ်ခဌင်သသည် အမဌဲတမ်သ သုတေသီ၏ ပခုံသပေါ်တလင် ကျရောက်နေပါသည်။
function argument ကိုအသုံသပဌု၍ သင့်လျော်သော optimization algorithm ကိုသတ်မဟတ်ထာသသည်။ minimize(..., method="").
ကိန်သရဟင်မျာသစလာ၏ လုပ်ဆောင်ချက်တစ်ခု၏ အခဌေအနေမဟန်ကို ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ရန်အတလက်၊ အောက်ပါနည်သလမ်သမျာသကို အကောင်အထည်ဖော်နိုင်သည်-

  • trust-constr — ယုံကဌည်စိတ်ချရသောဒေသရဟိ ဒေသန္တရအနိမ့်ဆုံသကို ရဟာဖလေပါ။ ဝီကီဆောင်သပါသ, Habre ၏ဆောင်သပါသ;
  • SLSQP - ကန့်သတ်ချက်မျာသနဟင့်အတူ ဆက်တိုက် လေသထောင့်ပုံစံ ပရိုဂရမ်ရေသဆလဲခဌင်သ၊ Lagrange စနစ်အာသ ဖဌေရဟင်သရန်အတလက် Newtonian နည်သလမ်သ။ ဝီကီဆောင်သပါသ.
  • TNC - ဖဌတ်တောက်ထာသသော နယူတန်အာသ ကန့်သတ်ထာသသော၊ ကန့်သတ်ထာသသော ထပ်ခါထပ်ခါပဌုလုပ်မဟုမျာသ၊ သီသခဌာသကိန်သရဟင်မျာသစလာရဟိသည့် လိုင်သမဟုတ်သောလုပ်ဆောင်ချက်မျာသအတလက် ကောင်သမလန်သည်။ ဝီကီဆောင်သပါသ.
  • L-BFGS-B — Broyden–Fletcher–Goldfarb–Shanno အဖလဲ့မဟ နည်သလမ်သတစ်ခု၊ Hessian matrix မဟ vector မျာသကို တစ်စိတ်တစ်ပိုင်သတင်ပေသခဌင်သကဌောင့် မဟတ်ဉာဏ်သုံသစလဲမဟု လျဟော့ချခဌင်သဖဌင့် အကောင်အထည်ဖော်ခဲ့သည်။ ဝီကီဆောင်သပါသ, Habre ၏ဆောင်သပါသ.
  • COBYLA — Linear Approximation အာသဖဌင့် MARE ကန့်သတ်ထာသသော အကောင်သဆုံသဖဌစ်အောင်၊ linear approximation (gradient တလက်ချက်ခဌင်သမရဟိဘဲ) ဖဌင့် ကန့်သတ်ထာသသော optimization။ ဝီကီဆောင်သပါသ.

ရလေသချယ်ထာသသောနည်သလမ်သပေါ် မူတည်၍ ပဌဿနာဖဌေရဟင်သခဌင်သအတလက် အခဌေအနေမျာသနဟင့် ကန့်သတ်ချက်မျာသကို ကလဲပဌာသစလာ သတ်မဟတ်ထာသသည်-

  • class object ပါ။ Bounds နည်သလမ်သမျာသအတလက် L-BFGS-B, TNC, SLSQP, trust-constr;
  • စာရင်သ (min, max) တူညီသောနည်သလမ်သမျာသအတလက် L-BFGS-B, TNC, SLSQP, trust-constr;
  • အရာဝတ္ထုတစ်ခု သို့မဟုတ် အရာဝတ္ထုမျာသစာရင်သ LinearConstraint, NonlinearConstraint COBYLA၊ SLSQP၊ ယုံကဌည်မဟု-constr နည်သလမ်သမျာသအတလက်၊
  • အဘိဓာန် သို့မဟုတ် အဘိဓာန်စာရင်သ {'type':str, 'fun':callable, 'jac':callable,opt, 'args':sequence,opt} COBYLA၊ SLSQP နည်သလမ်သမျာသအတလက်။

ဆောင်သပါသကောက်ကဌောင်သ-
1) အရာဝတ္ထုမျာသအဖဌစ် သတ်မဟတ်ထာသသော ကန့်သတ်ချက်မျာသဖဌင့် ယုံကဌည်စိတ်ချရသောဒေသ (method=”trust-constr”) တလင် အခဌေအနေအလိုက် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ထာသသော အယ်လဂိုရီသမ်ကို အသုံသပဌုရန် စဉ်သစာသပါ။ Bounds, LinearConstraint, NonlinearConstraint ;
2) အဘိဓာန်ပုံစံဖဌင့် သတ်မဟတ်ထာသသော ကန့်သတ်ချက်မျာသဖဌင့် အနည်သဆုံသ စတုရန်သပုံနည်သလမ်သ (နည်သလမ်သ = "SLSQP") ကို အသုံသပဌု၍ ဆက်တိုက် ပရိုဂရမ်ရေသဆလဲခဌင်သကို စဉ်သစာသပါ။ {'type', 'fun', 'jac', 'args'};
3) ဝဘ်စတူဒီယို၏နမူနာကို အသုံသပဌု၍ ထုတ်လုပ်ထာသသောထုတ်ကုန်မျာသ၏ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ၏နမူနာကို ပိုင်သခဌာသစိတ်ဖဌာပါ။

အခဌေအနေအရ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သနည်သလမ်သ = "trust-constr"

နည်သလမ်သကို အကောင်အထည်ဖော်ခဌင်သ။ trust-constr ပေါ်အခဌေခံကာ EQSQP တန်သတူညီမျဟမဟုပုံစံနဟင့် ကန့်သတ်ချက်မျာသရဟိသော ပဌဿနာမျာသအတလက် ခရီသစဉ် မညီမျဟမဟုပုံစံဖဌင့် အတာသအဆီသမျာသနဟင့် ပဌဿနာမျာသအတလက်။ နည်သလမ်သနဟစ်ခုလုံသကို ယုံကဌည်စိတ်ချရသောဒေသရဟိ ဒေသန္တရအနိမ့်ဆုံသကိုရဟာဖလေရန်အတလက် အယ်လဂိုရီသမ်မျာသဖဌင့် အကောင်အထည်ဖော်ပဌီသ အကဌီသစာသပဌဿနာမျာသအတလက် ကောင်သမလန်သင့်လျော်ပါသည်။

ယေဘူယျပုံစံတလင် အနိမ့်ဆုံသရဟာဖလေခဌင်သပဌဿနာ၏ သင်္ချာဖော်မဌူလာ

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

တင်သကျပ်သော တန်သတူညီမျဟမဟုဆိုင်ရာ ကန့်သတ်ချက်မျာသအတလက်၊ အောက်ဘောင်ကို အထက်ဘောင်နဟင့် ညီစေသည်။ SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။.
တစ်လမ်သမောင်သကန့်သတ်ချက်အတလက်၊ အပေါ် သို့မဟုတ် အောက် ကန့်သတ်ချက်ကို သတ်မဟတ်သည်။ np.inf သက်ဆိုင်သောလက္ခဏာနဟင့်အတူ။
ကိန်သရဟင်နဟစ်ခု၏ လူသိမျာသသော Rosenbrock လုပ်ဆောင်ချက်၏ အနည်သဆုံသကို ရဟာဖလေရန် လိုအပ်ပါစေ-

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

ကကိစ္စတလင်၊ ၎င်သ၏ အဓိပ္ပါယ်ဖလင့်ဆိုချက်တလင် အောက်ပါကန့်သတ်ချက်မျာသကို သတ်မဟတ်ထာသသည်-

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ ထူသထူသခဌာသခဌာသဖဌေရဟင်သချက်တစ်ခုရဟိသည်။ SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။ပထမနဟင့် စတုတ္ထကန့်သတ်ချက်မျာသသာ အကျုံသဝင်သည်။
အောက်ခဌေကနေ အပေါ်ကနေ ကန့်သတ်ချက်တလေကို ဖဌတ်ပဌီသ အဲဒါတလေကို scipy နဲ့ ဘယ်လိုရေသနိုင်မလဲဆိုတာ ကဌည့်ကဌရအောင်။
ကန့်သတ် SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။ О SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။ Bounds object ကို အသုံသပဌု၍ ၎င်သကို သတ်မဟတ်ကဌပါစို့။

from scipy.optimize import Bounds
bounds = Bounds ([0, -0.5], [1.0, 2.0])

ကန့်သတ် SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။ О SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။ အဲဒါကို linear form နဲ့ရေသကဌည့်ရအောင်။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

ကကန့်သတ်ချက်မျာသကို LinearConstraint object အဖဌစ် သတ်မဟတ်ကဌပါစို့။

import numpy as np
from scipy.optimize import LinearConstraint
linear_constraint = LinearConstraint ([[1, 2], [2, 1]], [-np.inf, 1], [1, 1])

နောက်ဆုံသတလင် matrix ပုံစံဖဌင့် linear မဟုတ်သော ကန့်သတ်ချက်

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

ကကန့်သတ်ချက်အတလက် Jacobi matrix နဟင့် Hessian matrix ၏ linear ပေါင်သစပ်မဟုကို မတရာသသော vector တစ်ခုဖဌင့် သတ်မဟတ်သည် SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။:

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

ယခု ကျလန်ုပ်တို့သည် လိုင်သမဟုတ်သော ကန့်သတ်ချက်ကို အရာဝတ္ထုတစ်ခုအဖဌစ် သတ်မဟတ်နိုင်ပါပဌီ။ NonlinearConstraint:

from scipy.optimize import NonlinearConstraint

def cons_f(x):
     return [x[0]**2 + x[1], x[0]**2 - x[1]]

def cons_J(x):
     return [[2*x[0], 1], [2*x[0], -1]]

def cons_H(x, v):
     return v[0]*np.array([[2, 0], [0, 0]]) + v[1]*np.array([[2, 0], [0, 0]])

nonlinear_constraint = NonlinearConstraint(cons_f, -np.inf, 1, jac=cons_J, hess=cons_H)

အရလယ်အစာသသည် ကဌီသမာသပါက၊ မက်ထရစ်မျာသကို ကျဲသည့်ပုံစံဖဌင့် သတ်မဟတ်နိုင်သည်-

from scipy.sparse import csc_matrix

def cons_H_sparse(x, v):
     return v[0]*csc_matrix([[2, 0], [0, 0]]) + v[1]*csc_matrix([[2, 0], [0, 0]])

nonlinear_constraint = NonlinearConstraint(cons_f, -np.inf, 1,
                                            jac=cons_J, hess=cons_H_sparse)

သို့မဟုတ် အရာဝတ္ထုတစ်ခုအဖဌစ် LinearOperator:

from scipy.sparse.linalg import LinearOperator

def cons_H_linear_operator(x, v):
    def matvec(p):
        return np.array([p[0]*2*(v[0]+v[1]), 0])
    return LinearOperator((2, 2), matvec=matvec)

nonlinear_constraint = NonlinearConstraint(cons_f, -np.inf, 1,
                                jac=cons_J, hess=cons_H_linear_operator)

Hessian matrix ကို တလက်ချက်သောအခါ SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။ ကဌိုသစာသအာသထုတ်မဟုမျာသစလာလိုအပ်သည်၊ သင်သည်အတန်သကိုသုံသနိုင်သည်။ HessianUpdateStrategy. အောက်ပါဗျူဟာမျာသကို ရရဟိနိုင်ပါသည်။ BFGS О SR1.

from scipy.optimize import BFGS

nonlinear_constraint = NonlinearConstraint(cons_f, -np.inf, 1, jac=cons_J, hess=BFGS())

Hessian ကို အကန့်အသတ်ဖဌင့် တလက်ချက်နိုင်သည်။

nonlinear_constraint = NonlinearConstraint (cons_f, -np.inf, 1, jac = cons_J, hess = '2-point')

အကန့်အသတ်မျာသအတလက် Jacobian matrix ကို အကန့်အသတ်မျာသ အကန့်အသတ်မျာသကို အသုံသပဌု၍ တလက်ချက်နိုင်သည်။ သို့သော်လည်သ ကကိစ္စတလင်၊ Hessian matrix ကို အကန့်အသတ်ဖဌင့် တလက်ချက်၍မရပါ။ Hessian ကို function တစ်ခုအဖဌစ် သို့မဟုတ် HessianUpdateStrategy အတန်သကို အသုံသပဌု၍ သတ်မဟတ်ရပါမည်။

nonlinear_constraint = NonlinearConstraint (cons_f, -np.inf, 1, jac = '2-point', hess = BFGS ())

ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သပဌဿနာအတလက် ဖဌေရဟင်သချက်မဟာ အောက်ပါအတိုင်သဖဌစ်သည်-

from scipy.optimize import minimize
from scipy.optimize import rosen, rosen_der, rosen_hess, rosen_hess_prod

x0 = np.array([0.5, 0])
res = minimize(rosen, x0, method='trust-constr', jac=rosen_der, hess=rosen_hess,
                constraints=[linear_constraint, nonlinear_constraint],
                options={'verbose': 1}, bounds=bounds)
print(res.x)

`gtol` termination condition is satisfied.
Number of iterations: 12, function evaluations: 8, CG iterations: 7, optimality: 2.99e-09, constraint violation: 1.11e-16, execution time: 0.033 s.
[0.41494531 0.17010937]

လိုအပ်ပါက၊ Hessian တလက်ချက်ခဌင်သအတလက် function ကို LinearOperator class ကိုအသုံသပဌု၍ သတ်မဟတ်နိုင်သည်။

def rosen_hess_linop(x):
    def matvec(p):
        return rosen_hess_prod(x, p)
    return LinearOperator((2, 2), matvec=matvec)

res = minimize(rosen, x0, method='trust-constr', jac=rosen_der, hess=rosen_hess_linop,
                 constraints=[linear_constraint, nonlinear_constraint],
                 options={'verbose': 1}, bounds=bounds)

print(res.x)

သို့မဟုတ် Hessian ၏ ထုတ်ကုန်နဟင့် ကန့်သတ်ဘောင်မဟတဆင့် မတရာသသော vector တစ်ခု hessp:

res = minimize(rosen, x0, method='trust-constr', jac=rosen_der, hessp=rosen_hess_prod,
                constraints=[linear_constraint, nonlinear_constraint],
                options={'verbose': 1}, bounds=bounds)
print(res.x)

တနည်သအာသဖဌင့် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ထာသသော လုပ်ဆောင်ချက်၏ ပထမနဟင့် ဒုတိယဆင့်ပလာသမျာသကို အနီသစပ်ဆုံသ ခန့်မဟန်သနိုင်ပါသည်။ ဥပမာအာသဖဌင့်၊ Hessian သည် လုပ်ဆောင်ချက်ကို အသုံသပဌု၍ ခန့်မဟန်သနိုင်သည်။ SR1 (နယူတိုနီယံ အနီသစပ်ဆုံသ)။ အရောင်အသလေသကို အကန့်အသတ်မရဟိ ကလဲပဌာသမဟုမျာသဖဌင့် ခန့်မဟန်သနိုင်သည်။

from scipy.optimize import SR1
res = minimize(rosen, x0, method='trust-constr',  jac="2-point", hess=SR1(),
               constraints=[linear_constraint, nonlinear_constraint],
               options={'verbose': 1}, bounds=bounds)
print(res.x)

အခဌေအနေအရ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သနည်သလမ်သ = "SLSQP"

SLSQP နည်သလမ်သသည် ဖောင်တလင် လုပ်ဆောင်ချက်ကို လျဟော့ချရန် ပဌဿနာမျာသကို ဖဌေရဟင်သရန် ဒီဇိုင်သထုတ်ထာသသည်။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

ဘယ်မဟာ SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။ О SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။ — တန်သတူညီမျဟမဟု သို့မဟုတ် မညီမျဟမဟုပုံစံဖဌင့် ကန့်သတ်ချက်မျာသကို ဖော်ပဌသည့် အညလဟန်သကိန်သအစုံ။ SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။ - လုပ်ဆောင်ချက်၏ အဓိပ္ပါယ်ဖလင့်ဆိုချက်၏ ဒိုမိန်သအတလက် အောက်နဟင့် အထက် ဘောင်အစုံ။

တစ်ပဌေသညီနဟင့် လိုင်သမဟုတ်သော ကန့်သတ်ချက်မျာသကို သော့မျာသဖဌင့် အဘိဓာန်ပုံစံဖဌင့် ဖော်ပဌထာသပါသည်။ type, fun О jac.

ineq_cons = {'type': 'ineq',
             'fun': lambda x: np.array ([1 - x [0] - 2 * x [1],
                                          1 - x [0] ** 2 - x [1],
                                          1 - x [0] ** 2 + x [1]]),
             'jac': lambda x: np.array ([[- 1.0, -2.0],
                                          [-2 * x [0], -1.0],
                                          [-2 * x [0], 1.0]])
            }

eq_cons = {'type': 'eq',
           'fun': lambda x: np.array ([2 * x [0] + x [1] - 1]),
           'jac': lambda x: np.array ([2.0, 1.0])
          }

အနိမ့်ဆုံသရဟာဖလေမဟုကို အောက်ပါအတိုင်သ လုပ်ဆောင်သည်။

x0 = np.array([0.5, 0])
res = minimize(rosen, x0, method='SLSQP', jac=rosen_der,
               constraints=[eq_cons, ineq_cons], options={'ftol': 1e-9, 'disp': True},
               bounds=bounds)

print(res.x)

Optimization terminated successfully.    (Exit mode 0)
            Current function value: 0.34271757499419825
            Iterations: 4
            Function evaluations: 5
            Gradient evaluations: 4
[0.41494475 0.1701105 ]

အကောင်သဆုံသဖဌစ်အောင် ဥပမာ

ပဉ္စမနည်သပညာဖလဲ့စည်သပုံသို့ ကူသပဌောင်သခဌင်သနဟင့်ပတ်သက်၍၊ ကျလန်ုပ်တို့အာသ သေသငယ်သော်လည်သ တည်ငဌိမ်သော ၀င်ငလေရရဟိစေသည့် ဝဘ်စတူဒီယိုတစ်ခု၏ နမူနာကို အသုံသပဌု၍ ထုတ်လုပ်မဟု ပိုမိုကောင်သမလန်အောင် လုပ်ဆောင်ခဌင်သကို ကဌည့်ကဌပါစို့။ ထုတ်ကုန်သုံသမျိုသထုတ်လုပ်သည့် Galley ၏ဒါရိုက်တာအဖဌစ် ကျလန်ုပ်တို့ကို စိတ်ကူသကဌည့်ကဌပါစို့။

  • x0 - 10 tr မဟဆင်သသက်သောစာမျက်နဟာမျာသကိုရောင်သချသည်။
  • x1 - 20 tr မဟ ကော်ပိုရိတ်ဝက်ဘ်ဆိုဒ်မျာသ။
  • x2 - 30 tr မဟ အလန်လိုင်သစတိုသမျာသ။

ကျလန်ုပ်တို့၏ ဖော်ရလေသော အလုပ်အဖလဲ့တလင် အငယ်တန်သလေသညသ၊ အလယ်တန်သ နဟစ်ညသနဟင့် အကဌီသတန်သတစ်ညသတို့ ပါဝင်သည်။ ၎င်သတို့၏ လစဉ် အလုပ်ချိန်ရန်ပုံငလေ-

  • ဇလန်လမျာသ 4 * 150 = 600 чел * час,
  • အလယ်- 2 * 150 = 300 чел * час,
  • Senor- 150 чел * час.

ပထမဆုံသရရဟိနိုင်သော အငယ်တန်သသည် အမျိုသအစာသ (x0၊ x1၊ x2)၊ အလယ်တန်သ - (10၊ 20၊ 30)၊ အကဌီသတန်သ - (7၊ 15၊ 20) အမျိုသအစာသဆိုက်တစ်ခု၏ ဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် ဖဌန့်ကျက်မဟုတလင် (၁၀၊ ၂၀၊ ၃၀) နာရီကို သုံသစလဲခလင့်ပဌုပါ။ ) မင်သဘဝရဲ့ အကောင်သဆုံသအချိန်နာရီ။

သာမာန်ဒါရိုက်တာမျာသကဲ့သို့ပင် ကျလန်ုပ်တို့သည် လစဉ်အမဌတ်အစလန်သမျာသကို အမျာသဆုံသရယူလိုပါသည်။ အောင်မဌင်မဟု၏ ပထမခဌေလဟမ်သမဟာ ရည်မဟန်သချက်လုပ်ဆောင်ချက်ကို ချရေသရန်ဖဌစ်သည်။ value တစ်လလျဟင် ထုတ်ကုန်မျာသမဟ ဝင်ငလေပမာဏအဖဌစ်၊

def value(x):
    return - 10*x[0] - 20*x[1] - 30*x[2]

၎င်သသည် အမဟာသအယလင်သတစ်ခုမဟုတ်ပါ၊ အမျာသဆုံသကိုရဟာဖလေသောအခါ၊ ဆန့်ကျင်ဘက်လက္ခဏာဖဌင့် ရည်ရလယ်ချက်လုပ်ဆောင်ချက်ကို သေသငယ်အောင်ပဌုလုပ်ထာသသည်။

နောက်တစ်ဆင့်မဟာ ကျလန်ုပ်တို့၏ဝန်ထမ်သမျာသအာသ အလုပ်ပိုလုပ်ခဌင်သကို တာသမဌစ်ရန်နဟင့် အလုပ်ချိန်ကန့်သတ်ချက်မျာသကို မိတ်ဆက်ရန်ဖဌစ်သည်-

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

ညီမျဟသည်-

SciPy၊ အခဌေအနေမျာသနဟင့်အတူ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ။

ineq_cons = {'type': 'ineq',
             'fun': lambda x: np.array ([600 - 10 * x [0] - 20 * x [1] - 30 * x[2],
                                         300 - 7  * x [0] - 15 * x [1] - 20 * x[2],
                                         150 - 5  * x [0] - 10 * x [1] - 15 * x[2]])
            }

တရာသဝင်ကန့်သတ်ချက်မဟာ ထုတ်ကုန်ထလက်ရဟိမဟုသည် အပဌုသဘောသာဖဌစ်ရမည်-

bnds = Bounds ([0, 0, 0], [np.inf, np.inf, np.inf])

နောက်ဆုံသအနေနဟင့်၊ အပဌင်သထန်ဆုံသသော ယူဆချက်မဟာ ဈေသနဟုန်သချိုသာပဌီသ အရည်အသလေသမဌင့်မာသခဌင်သကဌောင့် စိတ်ကျေနပ်မဟုပေသသည့် ဖောက်သည်တန်သစီသည် ကျလန်ုပ်တို့အတလက် အဆက်မပဌတ်တန်သစီနေခဌင်သဖဌစ်သည်။ ကန့်သတ်ထာသသော ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သပဌဿနာကို ဖဌေရဟင်သခဌင်သအပေါ် အခဌေခံ၍ ကျလန်ုပ်တို့သည် လစဉ်ထုတ်လုပ်မဟုပမာဏကို ကိုယ်တိုင်ရလေသချယ်နိုင်ပါသည်။ scipy.optimize:

x0 = np.array([10, 10, 10])
res = minimize(value, x0, method='SLSQP', constraints=ineq_cons, bounds=bnds)
print(res.x)

[7.85714286 5.71428571 3.57142857]

ကိန်သဂဏန်သမျာသအာသလုံသကို လျဟော့တလက်ပဌီသ ထုတ်ကုန်မျာသကို အကောင်သဆုံသဖဌန့်ချီခဌင်သဖဌင့် လစဉ် လဟေလဟော်မျာသ၏ဝန်ကို တလက်ချက်ကဌပါစို့ x = (8, 6, 3) :

  • ဇလန်လမျာသ 8 * 10 + 6 * 20 + 3 * 30 = 290 чел * час;
  • အလယ်- 8 * 7 + 6 * 15 + 3 * 20 = 206 чел * час;
  • Senor- 8 * 5 + 6 * 10 + 3 * 15 = 145 чел * час.

နိဂုံသချုပ်- ဒါရိုက်တာသည် ၎င်သ၏ ထိုက်တန်သော အမဌင့်ဆုံသကို လက်ခံရရဟိရန်အတလက် ဆင်သသက်သည့်စာမျက်နဟာ ၈ ခု၊ အလတ်စာသဆိုက် ၆ ခုနဟင့် တစ်လလျဟင် စတိုသဆိုင် ၃ ခု ဖန်တီသရန် အကောင်သဆုံသဖဌစ်သည်။ ကကိစ္စတလင်၊ အကဌီသတန်သသည်စက်ကိုမမျဟော်ဘဲထယ်ထိုသရမည်ဖဌစ်ပဌီသ၊ အလယ်တန်သမျာသ၏ဝန်သည်ခန့်မဟန်သခဌေအာသဖဌင့် 8/6 ဖဌစ်လိမ့်မည်၊ ငယ်ငယ်မျာသထက်ဝက်ထက်နည်သသည်။

ကောက်ချက်

ဆောင်သပါသတလင် ပက်ကေ့ဂျ်ဖဌင့်လုပ်ဆောင်ရန် အခဌေခံနည်သပညာမျာသကို အကျဉ်သချုပ်ဖော်ပဌထာသသည်။ scipy.optimizeအခဌေအနေအရ နည်သပါသမဟုပဌဿနာမျာသကို ဖဌေရဟင်သရန် အသုံသပဌုသည်။ ကိုယ်တိုင်ကိုယ်ကျ သုံသပါတယ်။ scipy ပညာရပ်ဆိုင်ရာ ရည်ရလယ်ချက်အတလက် သက်သက်ဖဌစ်သောကဌောင့် ပေသထာသသော ဥပမာသည် ရယ်စရာကောင်သသော သဘောသဘာဝဖဌစ်သည်။

ဥပမာအာသဖဌင့် I.L. Akulich ၏ “ဥပမာမျာသနဟင့် ပဌဿနာမျာသတလင် သင်္ချာပရိုဂရမ်ရေသဆလဲခဌင်သ” စာအုပ်တလင် သီအိုရီနဟင့် အတုအယောင်ဥပမာမျာသစလာကို တလေ့ရဟိနိုင်သည်။ ပိုမိုပဌင်သထန်သောလျဟောက်လလဟာ scipy.optimize ပုံအစုံမဟ 3D ဖလဲ့စည်သပုံကို တည်ဆောက်ရန် (Habre ၏ဆောင်သပါသ) တလင် ကဌည့်ရဟုနိုင်ပါသည်။ scipy-ချက်ပဌုတ်စာအုပ်.

သတင်သအချက်အလက်၏အဓိကအရင်သအမဌစ်မဟာ docs.scipy.orgကဘာသာပဌန်နဟင့် အခဌာသကဏ္ဍမျာသကို ပံ့ပိုသကူညီလိုသူမျာသ scipy မဟကဌိုဆိုပါတယ်။ GitHub.

СпасОбП mephistophees ထုတ်ဝေမဟု ပဌင်ဆင်မဟုတလင် ပါဝင်ရန်။

source: www.habr.com

မဟတ်ချက် Add