Yorumlar için çok uzun olan birkaç gözlemim var. İşte bir özet.
Sorununuzu tam olarak çözmek için herhangi bir algoritma doğrusal programları tam olarak çözmek için kullanılabilir (yani Sariel'in çözümünde kullanılan ve şu anda bir polinom zaman algoritmasına sahip olmayan "güçlü doğrusal programlama").
Doğal takip, yaklaşık çözümlerin (yani, "zayıf doğrusal programlama") bir çözüm sağlayabildiğidir. Cevap evet olsa da, bu prosedür için durdurma koşulunun, bildiğim kadarıyla, polinom zamanında hesaplanamayan miktarlar gerektirdiği görülmektedir. (yani, algoritma iyi bir şey bulur, ancak bunun zor olduğunu kanıtlamaktır .) Buradaki ana önerim , probleminiz için anlamlı bir " -optimal çözümü" tanımını yapmaktır, bu durumda bu yaklaşım izlenebilirdir. (Bu strateji, çokyüzlünün küçük yüzlerini etkili bir şekilde atar.)ϵ
Genel olarak, şu anki probleminizle ilgili düşüncelerinizi düşünürken verimlilik konularında çalışmaya devam ettim. Ancak bunun makul bir sezgisi var: etrafa attığımız nesneler - köşeler, yüzler, vb. - Ayrık ve üstel olarak bol miktarda.
(1.) Sorununuzu tam olarak çözen bir algoritmamız olduğunu varsayalım. Sağlanan orta noktayı içeren herhangi bir yüzün açıkta kalan noktasının orijinal doğrusal program için kesin bir çözüm olacağına dikkat edin. Bu yüzden aşağıdaki gibi devam edin. Orijinal objektif değerin (şimdi bildiğimiz) optimal değere eşit olması gerektiğini söyleyen yeni bir doğrusal kısıtlama ekleyin ve çözümün ilk koordinatını en üst düzeye çıkarmak için yeni bir objektif söyleyerek ayarlayın. Bu yordamı her boyut için bir kez tekrarlayın, her seferinde bir sınırlama ekleyin ve en üst düzeye çıkarmak için yeni bir koordinat seçin. Bu işlem her seferinde çözümün boyutunu azaltacaktır; zorunlu olarak, süreç tamamlandığında, tek boyutlu bir nokta anlamına gelen 0 boyutlu bir afinite setimiz vardır. BöyleceO(d)orta nokta çözme algoritmanızın yinelemeleri (ve her seferinde problem tanımını sadece polinom miktarında arttırmak ), güçlü doğrusal programlama çözülür. Bu, Sariel'in çözümü güçlü doğrusal programlama gerektirse de, sorunuzun kesin bir çözümünün bundan kaçınamayacağını gösterir. ( Düzenleme : kanıtımın girdi olarak kompakt bir polihedron (bir politop) varsaydığını unutmayın; aksi takdirde köşeleri bulmak için biraz daha çalışması gerekir.)d
(2.) Her bir iterasyonda tam bir şişmiş dışbükey çözücü kullanan, çözümleri orta nokta çözeltisinin hafif bir nosyonuna yaklaşacak olan yinelemeli bir şema. Olumlu ama azalan bir ceza parametreleri dizisi seçin ; bunların geometrik olarak aşağıya inmesi mantıklıdır, yani . Şimdi, her için dışbükey fonksiyonunu yaklaşık olarak küçültün{λi}∞i=1↓0λi=2−ii
⟨c,x⟩−λi∑j=1mln(⟨aj,x⟩−b),
Burada orijinal hedefinizdir ve , şimdi logaritmik engeller aracılığıyla hedefe yerleştirilen orijinal kısıtlamaları arasında değişmektedir (not, bu standarttır). Şimdi, çokyüzlünün minimize edici yüzünü (en büyük boyutta) , dışbükey opt kara yeterince küçük ve tolerans için, yaklaşık optimumunuzun bu yüze yakın olacağını unutmayın, ancak bariyerler itecektir diğer kısıtlamalardan olabildiğince uzağa. Başka bir yol söyledi,⟨c,x⟩jmλiτλiazalırsa, orijinal doğrusal hedef sonunda sizi uygun yüzlerden koruyan bazı titiz engellere hükmeder, ancak sizi diğer hedeflerden, özellikle hedef yüzün engellerinden koruyan engelleri etkilemez.
Mükemmel bir dünyada, oturup analitik olarak mükemmel bir değer veya en azından bir durma süresi belirleriz, böylece sonsuz sayıda problemi çözmek zorunda kalmazsınız. Ne yazık ki, bu zor görünüyor. Bir fikir, örneğin, boyutu 0'dan büyük olan herhangi bir yüzün en küçük genişliğini belirlemektir; bu, pozitif optimum ile iyi tanımlanmış bir minimizasyon problemidir, çünkü son derece fazla yüz vardır (ve genişlik her birine göre hesaplanır). Bununla , bariyerlerin etkisinin her yüzün merkezinde küçük olacağı kadar küçük ayarlayabiliriz . Ne yazık ki, üstel olarak birçok yüz olabilir, bu nedenle bu miktarı hesaplamak saçmalıktır.λλ
Karşılaşabileceğim tüm durma koşullarında bu tür hesaplama zorlukları vardı. (Dahası, birçoğu bunu güçlü bir doğrusal programlama çözücüsüne dönüştürmek için tekrar kullanılabilir.)
Bu nedenle tavsiyem, `` -close optimal orta nokta '' kavramını oluşturmak ve ve dışbükey opt kara kutu toleransınızı uygun şekilde seçerek çözmek . Ben gerçekten en büyük genişliğe sahip yüzler umurumda değil, çünkü bu makul bir seçim olduğunu düşünüyorum .ϵλτϵ
(Bazı son yorumlar.) Görünüşe göre "orta nokta" kavramı çok önemli; Sasho'nun yorumu, sentroidin (kütle merkezi?) Son derece zor bir sorun olduğunu belirtirken, en büyük yazılı topun bulunması kolaydır. Yukarıda önerdiğim logaritmik engeller genel olarak bu orta nokta kavramlarından hiçbiriyle tutarlı olmayacaktır. Öte yandan, bariyerler ve top için, sentroidinizden yüzün göreceli sınırına olan mesafede bir alt sınır elde edebilirsiniz; belki bu sizin için daha yararlıdır?
Son olarak, açıklamanıza göre, "hedef yüz" ün olabildiğince yüksek bir boyuta sahip olmak istediğinizi düşünüyor musunuz? Bu iyi tanımlanmıştır, ancak olası tüm küçük boyutlar için de çözüm yüzeyleri vardır. Her neyse, hem Sariel'in yaklaşımı hem de yukarıdaki bariyer yaklaşımı en büyük boyutla çalışacaktır.