eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingzadanie optymalizacyjneRe: zadanie optymalizacyjne
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: bartekltg <b...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: zadanie optymalizacyjne
    Date: Wed, 26 Sep 2012 14:35:32 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 88
    Message-ID: <k3usqm$95h$1@node1.news.atman.pl>
    References: <2...@g...com>
    <k3t365$gu3$1@node1.news.atman.pl> <k3t4im$iem$1@node1.news.atman.pl>
    <3...@g...com>
    NNTP-Posting-Host: 144-mi3-6.acn.waw.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node1.news.atman.pl 1348662934 9393 85.222.69.144 (26 Sep 2012 12:35:34 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Wed, 26 Sep 2012 12:35:34 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120824
    Thunderbird/15.0
    In-Reply-To: <3...@g...com>
    Xref: news-archive.icm.edu.pl pl.comp.programming:199622
    [ ukryj nagłówki ]

    W dniu 2012-09-26 10:32, M.M. pisze:
    > W dniu wtorek, 25 września 2012 22:35:35 UTC+2 użytkownik bartekltg napisał:
    >> W dniu 2012-09-25 22:11, bartekltg pisze:
    >> Rozwiązujemy następujące zadnienie zmodyfikowane:
    >> [programowanie liniowe]
    >> x*z1 > = 1
    >> x*z2 > = 1
    >> x*z3 > = 1
    >> x*zn > = 1
    >> z minimalizowaną funkcją celu sum(x)
    >> (czy jak kto woli x*[1,1,....1] )
    >> Za standardowym warunkiem x_i > 0
    >
    > Tego potrzebowalem zeby zrozumiec :)

    :)

    > A co do dowodu poprawnosci. Czy nie wystarczy ze:
    > 1) jest to poprawnie zefiniowane zadanie z programowania,
    > 2) podczas odtworzenia warunku suma x_i = 1 funkcje skaluja
    > sie liniowo (bo sa liniowe), a wiec wszystkie inne warunki
    > liniowe nadal beda obowiazywaly?

    No, musisz jeszcze pokazać, że to nadal najlepsze rozwiązanie.
    Tak, to oczywiste;), ale wolałem dopisać dowód (zresztą, dowodząc
    tego znalazłem błąd w pierwszej wersji).


    Sprawdziłem przerobioną wersję na oo calc. Nie tylko
    znalazł rozwiązanie, ale i okazało się, że fminsearch
    zaplątał się i był gorszy o parę %.


    Wpadłem rano, jak w miarę prosto 'algebraicznie'
    rozwiązywać pierwotny problem, ale algorytm
    jest dość podobny, w pewnym momencie radośnie sobie
    rzutujemy na jądro pewnej macierzy ograniczeń;)
    a do simpleksu jeśli nawet nie masz juz biblioteki,
    to łatwiej znaleźć gotowca czy materiały.


    W każdym razie szłoby to tak (szkic i nieprzetestowane):

    Mamy jakąś propozycję dla x.

    Uaktualniamy ją. Nawet o gradeint g = pi, gdzie
    pi odpowiada najmniejszej funkcji w x. Tylko teraz
    wrzucamy ograniczenia. Pierwszym jest
    równość g[1] +.. +g[8] = 0 - to gwarantuje
    pozostanie na naszej płaszczyźnie.
    Jeśli mamy pi*x == pj*x i jest to najmniejsza
    wartość ze wzyctkich pk*x, dodajemy równania
    pi[1]*g[1] +.. +pi[8]*g[8]==0
    pj[1]*g[1] +.. +pj[8]*g[8]==0

    Rzutujemy nasz gradient na jądro mcierzy opisującej
    te warunki (kod wygląda lepiej niż to brzmi:).
    Dzięki temu nie uciekamy z płaszczyzny oraz nie
    zmnijeszamy fi kosztem innych równych co do wartości fj.

    Dalej, dla każdej współrzędnej x[i]==0
    i g (już ten nowy gradient) g[i]<0
    dodajemy warunek g[i]==0.

    Powiększamy naszą macierz warunków i powtarzamy operację.

    Teraz gorsza część.

    patrzymy na wetkro x'=x + t*g. t to skalr.
    Rozwiązujemy wszystkie kolizje ze ściankami,
    oraz potójne równości pi*x' == pj*x' == pk*x'

    Wybieramy najmniejsze dodatnie t, podstawiamy
    x< x+t*g
    goto start:)


    Da się. Jest upierdliwe. Nadal polecam przepisać
    simplex z wiki;)


    pzdr
    bartekltg





Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: