Kelayakan pemrograman linier dengan kendala positivitas yang ketat

15

Ada sistem kendala linier Axb . Saya ingin menemukan vektor yang benar-benar positif x>0 yang memenuhi batasan-batasan ini. Itu berarti, xi>0 diperlukan untuk setiap komponen xi dari x . Bagaimana saya bisa menggunakan LP solver untuk menemukan vektor benar-benar positif x(atau mengkonfirmasi bahwa tidak ada x )? Saya tidak bisa begitu saja memperkenalkan sistem kendala lain xi>0, karena kesetaraan harus selalu diizinkan dalam LP — tetapi saya dapat menggunakan pemecah LP beberapa kali, dengan mengubah fungsi tujuan. Saya pikir saya harus menggunakan metode variabel kendur, tapi saya tidak tahu caranya.

sara
sumber

Jawaban:

15

Anda dapat menghindari masalah memilih kecil ϵ>0 dengan menjadi sedikit lebih ambisius: Cobalah untuk menemukan x sehingga Axb dan bahwa masuknya terkecil di x adalah terbesar mungkin.

Untuk itu, perkenalkan variabel baru

y=[xϵ]Rn+1
(jika x ada di Rn ) dan selesaikan masalah berikut ini dengan pemecah LP
maxy[00 1]ys.t.[A 0]yband0[10010101011]y.

Ini adalah rumusan ulang dari masalah berikut:

maxϵs.tAxbandxϵ1.

Beladau
sumber
dilakukan dengan baik, ini setara dengan trik penulis pendamping dan saya hanya menggunakan dalam makalah baru-baru ini, dan pasti lebih unggul daripada pendekatan yang saya sarankan.
Aron Ahmadia
Sepakat. Bermain bagus, tuan.
Geoff Oxberry
Masalah yang dirumuskan ulang mungkin memiliki tujuan yang tidak terbatas dalam kasus-kasus di mana jawaban atas masalah aslinya sepele. Misalnya, jika sistem kendala hanya . Itu bagus selama Anda memeriksa layak, optimal atau tidak terikat dalam status pengembalian pemecah lp Anda, atau secara eksplisit mengikat ϵ . x1ϵ
David Nehme
@ Davidvidehme: Seseorang dapat menambahkan kendala untuk mendapatkan tujuan yang dibatasi. yn+11
Arnold Neumaier
5

Untuk masalah kelayakan LP, saya tidak akan menggunakan simpleks standar. Algoritma simpleks primal (atau ganda) standar hanya akan mengunjungi simpul set yang layak dari masalah primal (atau ganda).

Biarkan set yang layak dari masalah yang Anda benar-benar ingin pecahkan menjadi , dan anggap sebaliknya Anda yang memecahkan masalah ( F ε ):F={x:Axb,x>0}Fε

minx0s.t.Axbxε1.

Perkiraan terdekat dari masalah yang ingin Anda selesaikan adalah , yang menerima terlalu banyak poin. Masalahnya adalah bahwa batas dari orthant positif (yaitu, himpunan B = { x : x0 , i : x i = 0 } bisa membuat bagian dari batas dari himpunan layak dari F 0 . Kami akan suka mengecualikan poin-poin itu. Salah satu cara melakukannya adalah dengan melakukan apa yang disarankan Aron, yaitu mengatur εF0B={x:x0,i:xi=0}F0εuntuk beberapa nilai positif kecil, dan kemudian gunakan algoritma LP standar. Strategi ini bagus, dan mungkin akan berhasil dalam berbagai situasi. Namun, itu akan gagal jika tidak layak. Kita tahu bahwa F 0F F ε untuk semua ε > 0 (untuk penyalahgunaan notasi dan merujuk pada set yang layak oleh masalah yang terkait), dan mungkin bahkan jika Anda memilih nilai positif kecil ε , solver LP akan menunjukkan bahwa LP Anda tidak mungkin.FεF0FFεε>0ε

Untuk solver LP, saya akan menggunakan algoritma titik interior untuk piringan hitam yang dimulai dengan titik layak dan tetap layak, yang merupakan cara lain untuk mengecualikan poin di . Anda tidak perlu menyediakan titik yang layak untuk algoritma ini; pemecah standar akan melakukannya untuk Anda. Metode seperti penskalaan affine, pengurangan potensial, dan metode penghalang mengatur piranti bantu bantu yang akan menemukan solusi yang layak, dan iterasi untuk algoritma ini melintasi bagian dalam wilayah yang layak. Anda hanya perlu menemukan satu titik di wilayah layak Anda, jadi selama masalah tambahan yang digunakan oleh pemecah LP menemukan titik layak untuk masalah Anda, dan bahwa titik layak itu benar-benar positif, Anda harus baik-baik saja. Jika memecahkan F ε gagal untuk nilai positif kecil εBFεε, Anda mungkin masih dapat menggunakan metode ini untuk mencari titik layak ketat positif dalam .F0

Namun, jangan gunakan simpleks, karena itu hanya akan mengeksplorasi simpul , yang persisnya ingin Anda hindari.Fε

Geoff Oxberry
sumber
4

Masalah kelayakan adalah permainan yang sedikit lebih rumit daripada masalah linier umum, yang telah Anda catat. Jika Anda menyelesaikan kira-kira (dengan menggunakan representasi floating-point dari sistem persamaan dan kendala), sah untuk meminta , di mana ϵ adalah beberapa nilai numerik yang sangat kecil, cukup besar untuk memastikan bahwa x i sebenarnya hidup di + , tetapi cukup kecil sehingga solusi pada batas tidak dipertimbangkan.xi>=ϵϵxi+

Anda mungkin harus menyesuaikan , dan solusi Anda akan memenuhi syarat untuk "dalam faktor ϵ ", tetapi ini cukup untuk banyak situasi.ϵϵ

Aron Ahmadia
sumber
2

The answer given by aeismail is to be read carefully, regard the lp

max(x1+x2)

s.t.

x1+x21

x1,x20

It has solutions (1,0) and (0,1) as well as others (degenerated). The generality of the question implys that these cases need to be treated as well.

Since you are able to choose you objective function, you could try to modify it iteratively. E.g. Start with all coefficients for all variables equal to one, check wether you gain an approprate solution. If one variable is zero, rise it's coefficient and start again...

Though I can not give a mathematical prove that this works (or a well defined procedure how to modify the objective function). I hope this helps :)

Dan
sumber
However, if you have a large number of degenerate solutions, how would you deal with this numerically? Won't pretty much any numerical solver throw up a warning (or worse) about solving this problem?
aeismail
No, they won't; they'll just return the first optimal solution encountered. The way that you would continue to generate solutions is to add cutting planes (or other constraints) that exclude previously calculated optimal solutions. In this case, adding such cutting planes would enable you to return a discrete approximation of the infinite set of optimal solutions.
Geoff Oxberry
I would view that as a strange programming decision; why wouldn't you want to tell the user that the objective function was doing something weird in the neighborhood of the reported solution? For a nonlinear solver, I could see there being an issue with figuring out what's going on; but shouldn't that be easier to tell with a linear system?
aeismail
I'd have to think about how one would detect degeneracy by actually constructing problems, but typically, users want an optimal solution, so the most important information for an LP is to return if the solution is optimal, feasible (but not optimal), infeasible, or unbounded. (These statuses are, in fact, what a solver like CPLEX would return.) Degeneracy is primarily a theoretical issue; the only reason it would be discussed in a numerical context is either in algorithm design or in practice, to note that degeneracy typically slows down a solver.
Geoff Oxberry