İkili mesafelerdeki hataların toplamını minimize etmek için yuvarlama


25

Aşağıdaki sorunun karmaşıklığı hakkında bilinenler:

  • Verilen: rasyonel sayılar x1<x2<<xn .
  • Çıktı: tamsayılar y1y2yn .
  • Amaç: en aza indirgeyin ,
    1i<jne(i,j),
    burada
    e(i,j)=|(yjyi)(xjxi)|.

Yani, rasyonel sayıları tam sayılara yuvarlamak istiyoruz, böylece hataların toplamını çift mesafeli olarak en aza indiririz. Her çift için i,j biz istiyoruz yuvarlak mesafe olması yjyi gerçek mesafe olabildiğince yakın olarak xjxi .


Motivasyon: sıkıcı bir metro gezisi ve bir dakikalık seyahat süresinin çözünürlüğünde istasyonların "yerlerini" gösteren bir poster. Burada onlar istasyonları arasında seyahat süresini aramak için afiş kullanırsanız İnsanların yaptığı hatayı minimize edilmektedir i ve j , tüm çiftleri üzerinde ortalama i<j .

yol haritası

(kaynak)

Örneğin, burada dört istasyon arasındaki ikili mesafelerin aşağıdaki yaklaşımlarını okuyabiliriz (kısalık için A, B, C, D kullanın):

  • A – B ≈ 1 dakika, B – C ≈ 2 dakika, C – D ≈ 2 dakika
  • A – C ≈ 3 dakika, B – D ≈ 4 dakika
  • A – D ≈ 5 dakika

Bu mümkün olan en iyi yaklaşım mı? Gerçek seyahat sürelerini biliyor olsaydınız daha iyi bir çözüm bulabilir misiniz?


İlk başta, bu dinamik programlamada basit bir alıştırma gibiydi, ama şimdi bir miktar gerçek düşünmenin gerekli olduğu görülüyor.

Bu sorunu tanıyan var mı? Veya çözmek için akıllı bir algoritma mı görüyorsunuz?


Düzenleme: Yorumlarda bahsedilen sorunun bazı doğal değişkenleri vardır; Hadi onlara bazı isimler verelim:

  • taban / ceil versiyonu: gereksinilir tüm i .yi{xi,xi}i

  • tamsayı sürümü: tüm i için yeterlidir .yiZi

  • monotonik versiyon: .y1y2yn

  • monoton olmayan versiyon: Biz olabilir için i < j .yi>yji<j

Orijinal soru, monotonik tamsayı versiyonunu göz önüne alır, ancak bu versiyonlardan herhangi biriyle ilgili cevaplar açıktır.


DP, yalnızca bitişik ölçümlere önem verirken durum için çalışır mı?
Suresh Venkat 14:12

1
@SureshVenkat: Aslında, bu durumda problem çok basitleşir: her bir i için sadece en iyi integral mesafeyi seçersiniz . Yani, her e ( i - 1 , i ) 'yi bağımsız olarak küçültebilirsiniz . yiyi1ie(i1,i)
Jukka Suomela,

4
Estie Arkin tarafından hazırlanan bu raporun birbiriyle ilişkili olduğu görülüyor: ams.sunysb.edu/~estie/papers/beautification.pdf Çıktıdaki farklı noktalar arası mesafelerin sayısını asgariye indirmenin NP zor olduğu kanıtlandı. Bu, bu sorularda olduğu gibi toplam kayma toplamı değildir, ancak rapordaki sertlik gadget'ları bu sorun için bir sertlik kanıtı önerebilir.
val

2
İyi bilinen teknikleri kullanarak bu sorunun kesinlikle çözülebilir olması gerektiğini hissediyorum. Ödülün insanları bu sorunu çözmeye motive etmek için yeterli olup olmadığını görelim. :)
Jukka Suomela

1
@ Vzn: Bu problemin hesap karmaşıklığı ile ilgileniyorum. Global optimum olanı bulma garantisi verilen polinomlu bir yerel arama yaklaşımı olduğunu kanıtlayabilirseniz , ödül sizindir.
Jukka Suomela

Yanıtlar:


9

TAMAM. DP algoritması gereksiz yere karmaşık görünüyor. Yorumları okuduktan sonra sorunun Monotonik versiyonunu çözebileceğini düşünüyorum (ancak her ayrıntıyı kontrol etmedim).

xi=xi+{xi}xi{xi}xixi+vivivivi

xixj

||vivj+xixj||{xi}{xj}+xixj||

İfade, mutlak değerler nedeniyle karmaşıktır. Bununla birlikte, monotonluğa sahip olduğumuza dikkat edin, bu yüzden içsel mutlak değerlerin içindeki nesnelerin AYNI işareti olması gerekir. Dış bir mutlak değere sahip olduğumuz için, bu işaretin ne olduğu önemli değil, ifade sadece basitleştirir

|vivj({xi}{xj})|

Bundan böyle, çözümün monotonik olduğunu varsaymıyoruz, ancak bunun yerine, tüm çiftler için yukarıdaki terimin toplamını minimize etme hedefini değiştiriyoruz. Bu sorunun çözümü monoton olacaksa, o zaman elbette monotonik versiyon için en uygun çözümdür. (Şunu düşünün: çözüm monotonik olmadığında orijinal sorunun sonsuz bir cezası vardır, yeni sorunun daha küçük bir cezası vardır, eğer yeni versiyonda bile bir monotonik çözüm kazanırsa, monotonik versiyonun çözümü olmalıdır)

{xi}>{xj}vivj

{xi}>{xj}vi<vjvi vj

ijvivj{xj}{xi}

k(i,k)(j,k)

|vivk({xi}{xk})|+|vjvk({xj}{xk})||vjvk({xi}{xk})|+|vivk({xj}{xk})|

ABCDA+B=C+D|AB||CD||A|+|B||C|+|D|xk'nin değiş tokuşunun sadece daha iyi olabileceğini biliyoruz.

{xi}

Sonunda problemin monotonik tamsayı versiyonuna gitmek istiyoruz. Optimum çözümün Monotonik zemin / tavan versiyonu ile aynı olduğunu ispatlayabiliriz.

vixivi0,1,2,...,max{vi}kvi>kvi=vi1|{xi}{xj}|<1

Şimdi, ortalama ispat eder grup içinde , en azından ortalama grubunda artı . Bu doğru değilse, basitçe tüm için izin , hesaplama yine amaç fonksiyonunun geliştiğini gösterir.{xi}k+1{xi}k1/2vi=vi1vi>k

ortalaması aralığında olduğundan, taban / tavan sürümüne tekabül eden en fazla iki grup vardır.{xi}[0,1)


1

Sadece genişletilmiş bir yorum ... (belki önemsiz ve / veya yanlış :)

Eğer ve en küçük ortak katı olan ler, o zaman rationals kurtulabilirsiniz: .xi=ai/biMbixi=Mxi

Eğer (zemin, ceil kısıtlaması) o zaman ikili değişkenler kullanabilir ifade mesafesini kullanılarak ( veya ):yi{xi,xi}viyixiLi=xiMxiRi=xiMxi

yi=xi+Livi+Ri(1vi)=xi+(LiRi)vi+Ri=xi+Divi+Ri

Ve asıl sorun (?!?) En aza indiren bulmakla eşdeğer olmalıdır :vi

1i<jn|DiviDjvj|

ilevi{0,1},DiZ


Yukarıdaki fikrini kullanan hatasını kullanarak son özetlemenizi genişletmek , aslında her bir ikili değişken zemin / tavanın yakın olduğu seçiminin optimum olduğu gösterilebilir mi? böylece yaprak yuvarlak nasıl sadece durum formu burada bir tamsayıdır. e(i,j)xnxnmn+12m
vzn

1
@vzn: Bunun bir karşı örnek olduğunu düşünüyorum. Biz yuvarlak ise yuvarlama kullanılarak kriterleri aldığımız bir hata var , ancak bir hata var (sonuç ise aynıdır LCM ile çarparak rasyonları elimine ediyoruz). (0,1.4,8.7)xi(0,1,9)1.4(0,2,9)1.2
Marzio De Biasi 29:12

Tamam, yine de yeni fikir. tekrar düşünün . toplamı genişlet ve ayrıca ile birçok terim azaltacaktır . ancak ikincisi eşittir ! bu nedenle nin en aza indirilmesi şeklinde bir soruna neden olur; burada , 0/1 sıralı bir vektördür ve , sabit bir sütun vektörüdür . doğru? o zaman önemsizdir ve sadece , deki karşılık gelen element negatifse 1, pozitif ise 0 olacak şekilde seçin .... QED? e(i,j)vivi2viXDXDXD
vzn

1
@vzn: mutlak değer fonksiyonunu ortadan kaldırmak için hatasını kullanırsanız, ; küçültme ile nasıl başa çıkacaksınız? ((yiyj)(xixj))22DiDjvivj
Marzio De Biasi

ayy! cevapladıysam cevap vermeden önce bu yorumu silme şansım oldu .. yine de hala neredeyse doğrusal bir matris optimizasyon problemini azaltıyor gibi görünüyor? Ayrıca terimiyle , burada bir sütun vektörüdür ...? VVTV
vzn

1

Başka bir genişletilmiş yorum ... Yanlış olabilir.

Ayrıca taban / tavan kısıtlamaları olan durumu da göz önünde bulunduruyorum ve onu dinamik programlama kullanarak çözmeye çalışıyorum (yapamam, ama belki de ortak bölen küçük olduğunda işe yarar).

Let kesir kısmı olmak , biz küçük şeyleri düşünün büyük için. En büyüğünün ve dinamik programlama yaptığımız için, dışındaki her şey için en uygun çözüm hakkında "bir şey" (bu şeyin ne olduğunu açıklayacağım) .{xi}xi{xi}{xk}xk

Şimdi yukarı veya aşağı objektif fonksiyondaki farkı düşünün . Bazı aslen Eğer yuvarlanır, sonra fark (gerçekten çok dikkatli kontrol etmedim sadece 1'dir ama bu böyledir gibi, gerçekten önemlidir görünüyor olursa olsun, ister sola veya sağa ait olan , farkı her zaman aynıdır); başlangıçta bazı yuvarlanırsa, fark . Yani: Aşağıdaki üç miktar biliniyorsa hangi kararı vermemiz gerektiğini biliyoruz:xkxixixkxi2{xk}2{xi}1

  1. kaç şey yuvarlanır
  2. kaç şey yuvarlanır
  3. yuvarlanan arasında toplamı nedir{xi}xi

Tamam, 1 ve 2 aslında aynıdır, f [N, Ndown, Sdown] 'ın ilk N noktası için en uygun çözüm olmasını sağlayabiliriz (noktalar artan sıfıra göre sıralandığında ), sayısı sitesindeki yuvarlak aşağı Ndown ve toplamı yuvarlak aşağı olanlar için Sdown olup. O zaman f [N-1] 'den f [N]' ye nasıl gideceğinizi yazmak zor değil.{xi}xi{xi}

Sorun elbette Sdown katlanarak birçok değere sahip olabilir. Ancak, ortak bölen küçük olduğunda ya da her şeyi önce bir ızgara noktasına getirip FPTAS alabildiğimizde çalışıyor (yukarıdaki dinamik program doğruysa ...)


@Marzio De Biasi'nin yorumunu farkettim. Bu nesnel işlevi kullanarak bu Dinamik programlama hakkında düşünmek çok daha kolaydır. Esasen göre sıralama yaptığımız için, göz önünde bulundurmaya çalıştığımızda, mutlak değer kaybolur. Ek ücret, veya . DiDivi(N1)DkDivi
Rong Ge

Tamam pozitif olmak zorunda değildir. Ancak bu da ele alınabilir. Yalnızcave . Ndown, eşit olan önceki sayısı, Nup, önceki 1'e eşit olan sayısıdır.Di|Divi|Ndown|Dk|+NupDkDivivjvj
Rong Ge

Bu umut verici görünüyor, ancak giriş değerleri birbirine çok yakınsa, bazı zorluklar olduğunu düşünüyorum. Örneğin, ve düşünün . Elimizdeki olabilir Şimdi eğer yuvarlanır ve hata hassas 1 olmadığına bağlı olarak değiştiğine dikkat artık güzel özelliği olurdu, aşağı yuvarlanır yukarı veya aşağı yuvarlandığını edilir. Öte yandan, (sıradaki sorudaki gibi) noktaların sırasını değiştiren bir yuvarlamayı yasaklarsak, o zaman dinamik programda hala mevcut olan olası yuvarlamaların kaydını tutmamız gerekiyor gibi görünüyor; Bunu yapabilir miyiz? xi=1.1xk=1.9xixkxk
Jukka Suomela

1
Ben Yorumunuzu gördükten sonra @Jukka Suomela, biz daha büyük bir şey asla izin gerektiğini fark küçük olan bir şey ise yuvarlak aşağı yuvarlanır. Tüm davaları incelerseniz bu kanıtlanabilir. O zaman sorunun cevabı (yuvarlak kısıtlamalarla) açıktır: eşikte, yuvarlamanız gereken eşiğin üstünde, aşağıya yuvarlamanız gerekir, eşikte belki biraz yukarı yuvarlanmalı, bazıları ise sadece kalite olmalı numaraya bağlı. Bu çözümler kolayca numaralandırılabilir. {xi}{xi}
Rong Ge

1
Demek istediğim bütün vakaları inceleyerek, varsayalım ki, , ve bölünmüş üç bölgeden birinde başka bir tane ve ya yukarı veya aşağı yuvarlanır. 6 vakanın aşağı ve yukarı yuvarlama hiçbir zaman aşağı yuvarlama ve yukarı yuvarlamadan daha kötü değildir . { x k } { x i } { x j } { x k } x i x j x j x i{xi}<{xj}{xk}{xi}{xj}{xk}xixjxjxi
Rong Ge
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.