मैं चाहता हूं कि छात्रों को एक असाइनमेंट में एक वर्गबद्ध कार्यक्रम को हल करने के बिना उन्हें सीवीएक्सओपी आदि जैसे अतिरिक्त सॉफ़्टवेयर इंस्टॉल करना पड़े। क्या कोई पाइथन कार्यान्वयन उपलब्ध है जो केवल न्यूप्पी/साइपी पर निर्भर करता है?क्वाड्रैटिक प्रोग्राम (क्यूपी) सॉल्वर जो केवल न्यूप्पी/साइपी पर निर्भर करता है?
उत्तर
मैं एक अच्छा समाधान भर में भाग गया और वहाँ यह पता प्राप्त करना चाहता था। इस पोस्टिंग के रूप में एनआईसीटीए (http://elefant.forge.nicta.com.au) से ELEFANT मशीन लर्निंग टूलकिट में LOQO का एक अजगर कार्यान्वयन है। Optimization.intpointsolver पर एक नज़र डालें। यह एलेक्स स्मोला द्वारा कोडित किया गया था, और मैंने बड़ी सफलता के साथ एक ही कोड के सी-संस्करण का उपयोग किया है।
मुझे विश्वास नहीं है कि परियोजना सक्रिय है। डाउनलोड लिंक टूटा हुआ है, लेकिन यह लिंक काम करता है: https://elefant.forge.nicta.com.au/download/release/0.4/index.html http: //users.cecs पर प्रोजेक्ट का सी ++ कांटा है। anu.edu.au/~chteo/BMRM.html, लेकिन मुझे विश्वास नहीं है कि यह भी सक्रिय है। –
मैं वर्गबद्ध प्रोग्रामिंग से बहुत परिचित नहीं हूं, लेकिन मुझे लगता है कि आप scipy.optimize
के सीमित न्यूनतमकरण एल्गोरिदम का उपयोग करके इस तरह की समस्या को हल कर सकते हैं। यहाँ एक उदाहरण है:
import numpy as np
from scipy import optimize
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
# minimize
# F = x[1]^2 + 4x[2]^2 -32x[2] + 64
# subject to:
# x[1] + x[2] <= 7
# -x[1] + 2x[2] <= 4
# x[1] >= 0
# x[2] >= 0
# x[2] <= 4
# in matrix notation:
# F = (1/2)*x.T*H*x + c*x + c0
# subject to:
# Ax <= b
# where:
# H = [[2, 0],
# [0, 8]]
# c = [0, -32]
# c0 = 64
# A = [[ 1, 1],
# [-1, 2],
# [-1, 0],
# [0, -1],
# [0, 1]]
# b = [7,4,0,0,4]
H = np.array([[2., 0.],
[0., 8.]])
c = np.array([0, -32])
c0 = 64
A = np.array([[ 1., 1.],
[-1., 2.],
[-1., 0.],
[0., -1.],
[0., 1.]])
b = np.array([7., 4., 0., 0., 4.])
x0 = np.random.randn(2)
def loss(x, sign=1.):
return sign * (0.5 * np.dot(x.T, np.dot(H, x))+ np.dot(c, x) + c0)
def jac(x, sign=1.):
return sign * (np.dot(x.T, H) + c)
cons = {'type':'ineq',
'fun':lambda x: b - np.dot(A,x),
'jac':lambda x: -A}
opt = {'disp':False}
def solve():
res_cons = optimize.minimize(loss, x0, jac=jac,constraints=cons,
method='SLSQP', options=opt)
res_uncons = optimize.minimize(loss, x0, jac=jac, method='SLSQP',
options=opt)
print '\nConstrained:'
print res_cons
print '\nUnconstrained:'
print res_uncons
x1, x2 = res_cons['x']
f = res_cons['fun']
x1_unc, x2_unc = res_uncons['x']
f_unc = res_uncons['fun']
# plotting
xgrid = np.mgrid[-2:4:0.1, 1.5:5.5:0.1]
xvec = xgrid.reshape(2, -1).T
F = np.vstack([loss(xi) for xi in xvec]).reshape(xgrid.shape[1:])
ax = plt.axes(projection='3d')
ax.hold(True)
ax.plot_surface(xgrid[0], xgrid[1], F, rstride=1, cstride=1,
cmap=plt.cm.jet, shade=True, alpha=0.9, linewidth=0)
ax.plot3D([x1], [x2], [f], 'og', mec='w', label='Constrained minimum')
ax.plot3D([x1_unc], [x2_unc], [f_unc], 'oy', mec='w',
label='Unconstrained minimum')
ax.legend(fancybox=True, numpoints=1)
ax.set_xlabel('x1')
ax.set_ylabel('x2')
ax.set_zlabel('F')
आउटपुट:
Constrained:
status: 0
success: True
njev: 4
nfev: 4
fun: 7.9999999999997584
x: array([ 2., 3.])
message: 'Optimization terminated successfully.'
jac: array([ 4., -8., 0.])
nit: 4
Unconstrained:
status: 0
success: True
njev: 3
nfev: 5
fun: 0.0
x: array([ -2.66453526e-15, 4.00000000e+00])
message: 'Optimization terminated successfully.'
jac: array([ -5.32907052e-15, -3.55271368e-15, 0.00000000e+00])
nit: 3
मुझे संदेह है कि यह बहुत ही कुशल है। मुझे लगता है कि LOQO का कार्यान्वयन: क्वाड्रैटिक प्रोग्रामिंग के लिए एक आंतरिक प्वाइंट कोड (http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.2191) तेज़ी से होगा। – flxb
आपके छात्रों को हल करने के लिए आपको कितनी मुश्किल समस्याएं हैं? एसएलएसक्यूपी मेरे (स्वीकार्य रूप से सरल) उदाहरण को लगभग 1.33 एमसीईसी में हल करता है। यह सीमाओं, असमानता और समानता बाधाओं के किसी भी संयोजन को भी संभाल सकता है। यदि आपका दिल क्यूपी के लिए अनुकूलित एक विशेष सॉल्वर का उपयोग करने पर सेट है तो आपको शायद (ए) अपने छात्रों को अतिरिक्त निर्भरताएं स्थापित करनी होंगी, या (बी) इसे स्वयं लिखें। –
आपके अनुवर्ती के लिए धन्यवाद। छात्रों को इसे एक अधिक प्रभावी एल्गोरिदम में लागू करने के लिए एक समर्थन वेक्टर मशीन समस्या को हल करने के लिए इसका उपयोग करना चाहिए। यह लगभग 100 चरों में एक उत्तल समस्या है। मैं LOQO को लागू कर सकता हूं, बस सोचा कि मैं पहले नहीं हो सकता। – flxb
यह देर से उत्तर हो सकता है, लेकिन मुझे CVXOPT
- http://cvxopt.org/ - Quadratic Programming
के लिए आमतौर पर उपयोग की जाने वाली मुफ्त पायथन लाइब्रेरी के रूप में मिला। हालांकि, इसे स्थापित करना आसान नहीं है, क्योंकि इसे अन्य निर्भरताओं की स्थापना की आवश्यकता है।
ठीक है, जैसा कि आपने वर्णन किया है, इंस्टॉल करना आसान नहीं है :-) सुझाव के लिए धन्यवाद के रूप में उपरोक्त लेकिन मुझे लगता है कि मैं पहले एक और विकल्प आज़माउंगा। –
@JimRaynor मुझे ओएस एक्स में 'पाइप इंस्टॉल cvxopt' के साथ सीधे' cvxopt' इंस्टॉल करने में कोई समस्या नहीं है। यही है। 'पीआईपी 'सब कुछ का ख्याल रखता है। और मैंने पहले से ही कई मशीनों में 'cvxopt' स्थापित किया है। निश्चित रूप से आपको कंपाइलर्स स्थापित करने की आवश्यकता है, लेकिन यह भी सीधा है और यदि आप 'scipy' का उपयोग कर रहे हैं तो संभवतः आप पहले से ही उन्हें प्राप्त कर सकते हैं। यदि यह मदद करता है, तो मैं एनाकोंडा को पायथन वितरण (जो पूरी तरह से मुक्त है) के रूप में उपयोग करता है और एनाकोंडा को भी सरल बनाता है। आपको व्यवस्थापकीय विशेषाधिकारों की आवश्यकता नहीं है और आपको कॉन्फ़िगर करने की आवश्यकता नहीं है। बस इसे डाउनलोड करें, इसे इंस्टॉल करें, और यह जाने के लिए तैयार है। –
यह लाइब्रेरी निर्भरताओं के प्रबंधन की आसानी के लिए एनाकोंडा में स्विच करने के कारणों में से एक थी। मैं बस इसे पीआईपी के साथ स्थापित नहीं कर सका। यदि आपके पास पहले से ही एनाकोंडा है, तो 'conda install -c https://conda.anaconda.org/omnia cvxopt' का उपयोग करें और यह हो गया है। मैं विंडोज 10 और पायथन 2.7 पर हूं। –
mystic
उन्नत बाधा कार्यक्षमता के साथ गैरलाइनर/गैर-उत्तल अनुकूलन एल्गोरिदम का शुद्ध पायथन कार्यान्वयन प्रदान करता है जो आम तौर पर केवल क्यूपी हलकों में पाया जाता है। mystic
वास्तव में अधिकांश क्यूपी हलकों की तुलना में अधिक मजबूत बाधा प्रदान करता है। हालांकि, अगर आप अनुकूलन एल्गोरिदमिक गति की तलाश में हैं, तो निम्नलिखित आपके लिए नहीं है। mystic
धीमा नहीं है, लेकिन यह पाइथन बाइंडिंग के विपरीत शुद्ध पायथन है। यदि आप एक गैरलाइन सॉल्वर में लचीलापन और क्यूपी बाधाओं की कार्यक्षमता की तलाश में हैं, तो आपको रुचि हो सकती है।
"""
Maximize: f = 2*x[0]*x[1] + 2*x[0] - x[0]**2 - 2*x[1]**2
Subject to: -2*x[0] + 2*x[1] <= -2
2*x[0] - 4*x[1] <= 0
x[0]**3 -x[1] == 0
where: 0 <= x[0] <= inf
1 <= x[1] <= inf
"""
import numpy as np
import mystic.symbolic as ms
import mystic.solvers as my
import mystic.math as mm
# generate constraints and penalty for a nonlinear system of equations
ieqn = '''
-2*x0 + 2*x1 <= -2
2*x0 - 4*x1 <= 0'''
eqn = '''
x0**3 - x1 == 0'''
cons = ms.generate_constraint(ms.generate_solvers(ms.simplify(eqn,target='x1')))
pens = ms.generate_penalty(ms.generate_conditions(ieqn), k=1e3)
bounds = [(0., None), (1., None)]
# get the objective
def objective(x, sign=1):
x = np.asarray(x)
return sign * (2*x[0]*x[1] + 2*x[0] - x[0]**2 - 2*x[1]**2)
# solve
x0 = np.random.rand(2)
sol = my.fmin_powell(objective, x0, constraint=cons, penalty=pens, disp=True,
bounds=bounds, gtol=3, ftol=1e-6, full_output=True,
args=(-1,))
print 'x* = %s; f(x*) = %s' % (sol[0], -sol[1])
बातें ध्यान दें कि mystic
सामान्य रूप से किसी भी अनुकूलक, न सिर्फ एक विशेष QP solver के लिए एल.पी., QP, और उच्च आदेश समानता और असमानता की कमी लागू कर सकते हैं। दूसरा, mystic
प्रतीकात्मक गणित को पच सकता है, इसलिए बाधाओं को परिभाषित करने/दर्ज करने में आसानी मैट्रिस और कार्यों के डेरिवेटिव के साथ काम करने से थोड़ा बेहतर है। mystic
numpy
पर निर्भर करता है, और यदि यह स्थापित है तो scipy
का उपयोग करेगा (हालांकि, scipy
आवश्यक नहीं है)। mystic
प्रतीकात्मक बाधाओं को संभालने के लिए sympy
का उपयोग करता है, लेकिन यह सामान्य रूप से अनुकूलन के लिए भी आवश्यक नहीं है।
आउटपुट:
Optimization terminated successfully.
Current function value: -2.000000
Iterations: 3
Function evaluations: 103
x* = [ 2. 1.]; f(x*) = 2.0
यहाँ mystic
प्राप्त करें: https://github.com/uqfoundation
- 1. कैसे करें: सॉल्वर फाउंडेशन क्वाड्रैटिक कम से कम वर्ग
- 2. लक्ष्य बनाना बाइनरी पर निर्भर करता है, जो $ PATH
- 3. क्लाउडफॉर्मेशन, निर्भर करता है पर निर्भर करता है
- 4. Django - उदाहरण पर निर्भर करता है जो उदाहरण
- 5. कमांड लाइन से जावा प्रोग्राम चलाना जो जार फ़ाइल पर निर्भर करता है?
- 6. रेडिस पाइपलाइन एकाधिक कमांड जो पिछले पर निर्भर करता है?
- 7. आईओएस आवधिक पृष्ठभूमि स्थान अपडेट जो न केवल महत्वपूर्ण स्थान परिवर्तन पर निर्भर करता है
- 8. ऑनर्यूम पर निर्भर करता है ReequestPermissionsResult पर?
- 9. ग्रैडल, निर्भर करता है
- 10. विंडोज़ बनाना केवल एक प्रोग्राम है जो उपयोगकर्ता को
- 11. आयात और निर्भर करता है
- 12. इस एसओआर सॉल्वर की गति इनपुट पर निर्भर क्यों करती है?
- 13. यूनिट को एक सिस्टम का परीक्षण करना मुश्किल क्यों है जो सिंगलेट्स पर निर्भर करता है?
- 14. क्वाड्रैटिक से रैखिक प्रोग्राम को कैसे परिवर्तित करें?
- 15. कक्षा का आकार केवल डेटा सदस्यों पर निर्भर करता है, न कि सदस्य कार्यों पर?
- 16. एचटीएमएल क्वाड्रैटिक वक्र पर केंद्र बिंदु
- 17. कस्टम नियंत्रण पर टेम्पलेट बाइंडिंग पर निर्भर करता है
- 18. विंडबैग सेट सशर्त ब्रेकपॉइंट्स जो कॉल स्टैक पर निर्भर करता है
- 19. क्या यह एक विधि के लिए एक कोड गंध है जो दूसरे पर निर्भर करता है?
- 20. सी पुस्तकालयों के कार्यान्वयन ओएस पर निर्भर करता है?
- 21. पर निर्भर करता है और अन्य स्वचालित कोड विश्लेषक revelence?
- 22. सेटिंग्स पर निर्भर करता है Django माइग्रेशन और फ़ाइलसिस्टम स्टोरेज
- 23. सीआरएएन पैकेज बायोकॉन्डक्टर पैकेज पर निर्भर करता है त्रुटि
- 24. इसके साथ एक क्रिया प्रस्तुत करना: नोटिस जो यूआरएल परम पर निर्भर करता है
- 25. जम्मू कोड लिखना जो रत्न और मेवेन प्रोजेक्ट्स पर निर्भर करता है
- 26. कोणीय फ़िल्टर का परीक्षण कैसे करें जो moment.js पर निर्भर करता है?
- 27. मॉकिटो, एक ऑब्जेक्ट का परीक्षण जो इंजेक्शन निर्भरताओं (वसंत) पर निर्भर करता है?
- 28. कोड के लिए सबूत जो हस्ताक्षरित पूर्णांक ओवरफ़्लो पर निर्भर करता है?
- 29. एक एमवीसी नियंत्रक कार्रवाई इकाई-परीक्षण कैसे करें जो सी # में प्रमाणीकरण पर निर्भर करता है?
- 30. एसबीटी प्लगइन जो खुद को बनाने के लिए खुद पर निर्भर करता है
क्या आप एक द्विघात कार्यक्रम द्वारा क्या मतलब है पर कुछ लिंक प्रदान कर सकता है और हो सकता है एक या दो उदाहरण है, यह अधिक लोगों को इस का जवाब देने की अनुमति होगी सवाल। कृपया अपना प्रश्न अपडेट करें, क्योंकि मुझे यकीन नहीं है कि क्यूपी द्वारा आपका क्या मतलब है और मुझे पता चलेगा कि आपका प्रोग्राम कैसे लिखना है, हालांकि मुझे नहीं पता कि इसकी क्या आवश्यकता है। धन्यवाद! –
स्पष्टीकरण के लिए खेद है। क्यूपी एक विशेष रैखिक बीजगणित समस्या है, विकिपीडिया देखें (http://en.wikipedia.org/wiki/Quadratic_programming)। – flxb
मुझे यह अजीब लगता है कि ** पायथन ** के लिए पूछे जाने वाले प्रश्न ** क्यूपी सॉल्वर को लागू किया गया है कि ** केवल ** 'numpy' /' scipy' पर निर्भर करता है और ** ** ** अतिरिक्त सॉफ्टवेयर की आवश्यकता नहीं है ** जैसे cvxopt * * ... का एक जवाब है जो 'cvxopt' और दूसरा (स्वीकार्य उत्तर) की सिफारिश करता है जो अनुशंसा करता है कि अनिवार्य रूप से अनियमित पाइथन बाइंडिंग किसी अन्य भाषा (यानी एक गैर-पायथन कार्यान्वयन) के लिए क्या है। –