Saya bekerja di lab yang melakukan optimasi global masalah bilangan bulat dan non-cembung. Pengalaman saya dengan pemecah pengoptimalan sumber terbuka adalah bahwa yang lebih baik biasanya ditulis dalam bahasa yang dikompilasi, dan harganya lebih murah dibandingkan dengan paket pengoptimalan komersial.
Jika Anda dapat merumuskan masalah Anda sebagai sistem persamaan eksplisit dan membutuhkan pemecah gratis, taruhan terbaik Anda mungkin IPOPT, seperti kata Aron. Pemecah gratis lainnya dapat ditemukan di situs web COIN-OR . Setahu saya, pemecah nonlinier tidak memiliki binding Python yang disediakan oleh pengembang; setiap binding yang Anda temukan akan menjadi pihak ketiga. Untuk mendapatkan solusi yang baik, Anda juga harus membungkus pemecah cembung nonlinier yang Anda temukan dalam heuristik optimisasi global stokastik yang sesuai, atau dalam algoritma optimisasi global deterministik seperti cabang-dan-terikat. Sebagai alternatif, Anda dapat menggunakan Bonmin atau Couenne, yang keduanya merupakan pemecah optimisasi non-cembung deterministik yang berkinerja baik dengan baik dibandingkan dengan pemecah canggih, BARON .
Jika Anda dapat membeli pemecah optimasi komersial, Anda dapat mempertimbangkan melihat bahasa pemodelan GAMS , yang mencakup beberapa pemecah optimasi nonlinier. Disebutkan secara khusus adalah antarmuka untuk pemecah CONOPT, SNOPT, dan BARON. (CONOPT dan SNOPT adalah pemecah cembung.) Solusi kludgey yang saya gunakan di masa lalu adalah dengan menggunakan ikatan bahasa Fortran (atau Matlab) ke GAMS untuk menulis file GAMS dan memanggil GAMS dari Fortran (atau Matlab) untuk menghitung solusi masalah optimisasi. GAMS memiliki ikatan bahasa Python, dan staf dukungan yang sangat responsif bersedia membantu jika ada masalah. (Penafian: Saya tidak berafiliasi dengan GAMS, tetapi lab saya memiliki lisensi GAMS.) Pemecah masalah komersial tidak boleh lebih buruk darifmincon
; sebenarnya, saya akan terkejut jika mereka tidak jauh lebih baik. Jika masalah Anda cukup kecil, maka Anda mungkin tidak perlu membeli lisensi GAMS dan lisensi untuk solver, karena salinan evaluasi GAMS dapat diunduh dari situs web mereka. Jika tidak, Anda mungkin ingin memutuskan solver mana yang akan dibeli bersamaan dengan lisensi GAMS. Perlu dicatat bahwa BARON membutuhkan pemecah pemrograman linear bilangan bulat, dan lisensi untuk dua pemecah program linear bilangan bulat bilangan bulat terbaik CPLEX dan GUROBI gratis untuk akademisi, jadi Anda mungkin bisa pergi hanya dengan membeli antarmuka GAMS sebagai gantinya daripada antarmuka dan lisensi pemecah, yang dapat menghemat banyak uang.
Poin ini diulangi: untuk setiap pemecah optimasi non-cembung deterministik yang telah saya sebutkan di atas, Anda harus dapat merumuskan model sebagai set persamaan eksplisit. Jika tidak, algoritma optimasi non-cembung tidak akan berfungsi, karena semuanya bergantung pada analisis simbolik untuk membangun relaksasi cembung untuk algoritma branch-and-bound-like.
UPDATE: Satu pemikiran yang tidak terpikir oleh saya pada awalnya adalah bahwa Anda juga dapat memanggil Toolkit untuk Pengoptimalan Tingkat Lanjut ( TAO ) dan PETSc menggunakan tao4py dan petsc4py , yang akan memiliki potensi manfaat tambahan dari paralelisasi yang lebih mudah, dan meningkatkan keakraban dengan PETSc dan alat ACTS .
PEMBARUAN # 2: Berdasarkan informasi tambahan yang Anda sebutkan, metode pemrograman kuadratik sekuensial (SQP) akan menjadi taruhan terbaik Anda. Metode SQP secara umum dianggap lebih kuat daripada metode titik interior, tetapi memiliki kelemahan karena membutuhkan pelarut linier padat. Karena Anda lebih peduli tentang ketahanan daripada kecepatan, SQP akan menjadi taruhan terbaik Anda. Saya tidak dapat menemukan pemecah SQP yang baik di luar sana yang ditulis dengan Python (dan tampaknya, tidak juga Sven Leyffer di Argonne dalam laporan teknis ini ). Saya menduga bahwa algoritma yang diimplementasikan dalam paket seperti SciPy dan OpenOpt memiliki kerangka dasar dari beberapa algoritma SQP yang diimplementasikan, tetapi tanpa heuristik khusus yang digunakan oleh kode yang lebih maju untuk mengatasi masalah konvergensi. Anda dapat mencoba NLopt, ditulis oleh Steven Johnson di MIT. Saya tidak memiliki harapan yang tinggi untuk itu karena tidak memiliki reputasi yang saya ketahui, tetapi Steven Johnson adalah orang yang cerdas yang menulis perangkat lunak yang baik (setelah semua, ia menulis bersama FFTW). Itu mengimplementasikan versi SQP; jika ini perangkat lunak yang bagus, beri tahu saya.
Saya berharap bahwa TAO akan memiliki sesuatu di jalan pemecah optimasi dibatasi, tetapi tidak. Anda tentu dapat menggunakan apa yang mereka miliki untuk membangunnya; mereka punya banyak komponen di sana. Seperti yang Anda tunjukkan, akan jauh lebih sulit bagi Anda untuk melakukan itu, dan jika Anda akan mengalami masalah seperti itu, Anda mungkin juga seorang pengembang TAO.
Dengan informasi tambahan itu, Anda lebih mungkin mendapatkan hasil yang lebih baik dengan memanggil GAMS dari Python (jika itu pilihan), atau mencoba menambal antarmuka IPOPT Python. Karena IPOPT menggunakan metode titik interior, itu tidak akan sekuat, tetapi mungkin implementasi Andreas dari metode titik interior jauh lebih baik daripada penerapan Matlab tentang SQP, dalam hal ini, Anda mungkin tidak mengorbankan ketahanan sama sekali. Anda harus menjalankan beberapa studi kasus untuk mengetahui dengan pasti.
Anda sudah mengetahui trik untuk merumuskan kembali batasan ketimpangan rasional sebagai kendala ketidaksetaraan polinomial (ada di buku Anda); alasan ini akan membantu BARON dan beberapa pemecah nonconvex lainnya adalah bahwa ia dapat menggunakan istilah analisis untuk menghasilkan ketidaksetaraan valid tambahan yang dapat digunakan sebagai potongan untuk meningkatkan dan mempercepat konvergensi pemecah.
Tidak termasuk pengikatan GAMS Python dan antarmuka Python ke IPOPT, jawabannya tidak, belum ada pemecah pemrograman nonlinier berkualitas tinggi untuk Python. Mungkin @Dominique akan mengubahnya dengan NLPy.
UPDATE # 3: Lebih banyak tikaman liar menemukan solver berbasis Python menghasilkan PyGMO , yang merupakan seperangkat ikatan Python ke PaGMO, sebuah solver optimisasi global multiobjective optimizer berbasis C ++. Meskipun ini dibuat untuk optimisasi multiobjek, ia juga dapat digunakan untuk pemrograman nonlinier objektif tunggal, dan memiliki antarmuka Python ke IPOPT dan SNOPT, di antara pemecah lainnya. Itu dikembangkan dalam Badan Antariksa Eropa , jadi mudah-mudahan ada komunitas di belakangnya. Itu juga dirilis relatif baru (24 November 2011).