-
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: Tue, 25 Sep 2012 22:11:47 +0200
Organization: ATMAN - ATM S.A.
Lines: 178
Message-ID: <k3t365$gu3$1@node1.news.atman.pl>
References: <2...@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 1348603909 17347 85.222.69.144 (25 Sep 2012 20:11:49
GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Tue, 25 Sep 2012 20:11:49 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120824
Thunderbird/15.0
In-Reply-To: <2...@g...com>
Xref: news-archive.icm.edu.pl pl.comp.programming:199584
[ ukryj nagłówki ]W dniu 2012-09-25 13:22, M.M. pisze:
Trochę gdybania i gorszych metod. Jak Ci się spieszy,
leć od razu do 'rozwiązanie właściwe'
> Jest N-elementowy ciag parametrow p[1..N] i N-elementowy ciag argumentow x[1..N]. W
moim problemie obecnie N jest rowne 8,
>ale potem bedzie wieksze. Zarowno parametry jak i argumenty to liczby rzeczywiste.
Parametry p sa z przedzialu 1 <= p <= P,
>gdzie P z reguly jest mniejsze od 10.
Warunek A:
>Suma argumentow x zawsze musi byc rowna zero
Super. x1+.. +x8 = 0
Warunek b
> Ponadto kazdy argument x musi byc wiekszy lub rowny zero.
ok.
x1>=0
x2>=0
...
x8>=0
Z drugiej storny A mówi, że
x1+.. +x8 = 0
-x1 = x2+...+x8
Ale B! x2>=0, x8>=0, więc
-x1 = x2+...+x8 >= 0
x1<=0
Tak samo z pozostałymi. Z Twoich warunków x=0 i tyle.
Dalej zakładam, że miało być x1+x2+...+x8 = 1
Zamiast jeden można podstawić sobie epsylon.
Pamiętaj, że wynik będzie najzwyczajniej w świecie
proporcjonalny do tego epsylona. To liniowe jest.
100 razy dalej od sum x_i =0, sto razy większy wynik.
> Jest kilka funkcji liniowych (obecnie mam trzy, ale bedzie wiecej):
> f1(p,x) = suma od 1 do N z1[j] * x[j];
> f2(p,x) = suma od 1 do N z2[j] * x[j];
> f3(p,x) = suma od 1 do N z3[j] * x[j];
> gdzie zi[j] moze przyjmowac wartosc zero, jeden, albo p[j].
>
> Ciagi p i z sa danymi w zadaniu. Szukamy takiego ciagu x ktory zmaksymalizuje
minimum:
> max( min( f1, f2 , f3 )).
Minimum jest z tych 3 funkcji, a po czym jest maksimum?
Matematyczna precyzacja nigdy nie szkodzi, a zmniejsza
liczbę niepotrzebnych postów:)
max_{x}( min( f1, f2 , f3 )). :)
> Dostosowalem do tego zdania symulowane wyzarzanie. Znajduje rozwiazanie po okolo
50mln iteracji,
> co zajmuje na procesorze i3 okolo 4-5 sekund. Niestety dopuszczalny czas to 0.03s.
> Da sie to jakos szybciej policzyc?
Nie wyzarzaniem;) Już zwykłe MC będzie lepsze:)
[Na serio, sprawdza się kiepsko, 100000 losowych daje
wynik dość odległy o optymalnego. Dla losowych zi optymalnie
bylo coś rzedu 7.3, a max z CMC (czyt chamskie MC) dawało 6.7]
Jakakolwiek 'numeryczna' metoda minimalizacji sprawdzi się
znacznie lepiej. W końcu to tylko kawałkami liniowe funkcje
na 7 (N-1) wymiarowej przestrzeni (a właściwie kostki).
F = min( sum z1[j] * x[j],sum z2[j] * x[j], sum z3[j] * x[j] )
W dodatku wypukła/wklęsła.
Im prostsza, tym lepsza. Matalbowskiego fminsearch trzeba nieco
podpuscić, aby to dobrze rozwiązywał.
Ale nadal, to funkcje liniowe. Gdzie będzie rozwiązanie?
Na rogach, na przecięciu f1=f2=f3 i brzegu kostki/warunków
sumowania, albo brzego i równości dwóch.
W rzeczywistości obstawiam równość wszystkich trzech (mają
dodatnie współczynniki...)
Tyle, że to tez strzelanie z armaty do wrócla, i to
zupełnie nie tą amunicją co trzeba.
Idzmy dalej. Popatrz na to geometrycznie.
z1 z2 z3 to takie wektorki sterczące w ściśle dodatnią
'ćwiartkę' przestrzeni. Warunek sum xi = 1 to wybór
pewnej hiperpłaszczyzny.
Wybieramy jakiś wektor x z tej płaszczyzny, rzutujemy
na wektorki z1,z2,z3 i bierzemy najmniejszy rzut.
Bierzemy największy.
x (po prostu z R^N)
popatrzmy na 'hipsometry'. Płaszczyzna stałęj wartośći.
Weźmy jakąś wartość. b.
Wyrysujmy
z1*x==b
z2*x==b
z3*x==b
...
Wyjdą z tego trzy hiperpłaszczyzny. One nas
ograniczają. Jednocześnie próbujemy dostać
się jak najbliżej centrum.
Powstanie nam fragment wielościanu wypukłego.
[Ciach mętna interpretacja geometryczna]
********ROZWIĄZANIE WŁAŚCIWE*****************
Mamy tutaj zwyczajne zagadnienie programowania liniowego z warunkami:
Najpierw je zdefiniujemy, a potem pokażemy, że to to samo.
z1*x >= 1
z2*x >= 1
z3*x >= 1
x>0 (w znaczeniu x[i] > 0)
oraz funkcją celu [1,1,1,1, 1,1,1,1] *x i chcemy ją _minimalizować_
Z algorytmu simplex czy jakiejkolwiek innej metody uzyskujesz
rozwiązanie x_1 spełniające te warunki i maksymalizujące
funkcję celu.
Rozwiązaniem oryginalnego problemu jest x_2 = x_1/(suma(x_1)).
Dlaczego? No to szkic dowodu:
Niech b = 1/suma(x1).
Po przeskalowaniu x-ów przez b mamy
suma(x_2)=1 i spełnia
z1*x_2 >= b
z2*x_2 >= b
z3*x_2 >= b
czyli min (fi,f2,f3)>=b;) Wiemy, że równe.
Niech inny x3, taki , ze suma(x3)=1
jest lepszym 'maksimum z minimum'
z1*x_3 >= c
z2*x_3 >= c
z3*x_3 >= c
c > b
Wtedy
x3/c spełnia nierówności z programowania liniowego
(zi * (x_3/c)) <= 1 oraz
sum (x_3/c) = 1/c < 1/b, czyli jest lepszym minimum
funkcji celul z programowania liniowego. To jest
sprzeczne z tym, że x2 jest rozwiązaniem programowania
liniowego.
[koniec]
W 0.03 s to kilogramy takich zagadnień oblecisz.
pzdr
bartekltg
Następne wpisy z tego wątku
- 25.09.12 22:25 kenobi
- 25.09.12 22:35 bartekltg
- 25.09.12 22:57 bartekltg
- 25.09.12 22:58 Kacper Rzepecki
- 25.09.12 22:58 M.M.
- 25.09.12 23:02 bartekltg
- 25.09.12 23:17 kenobi
- 26.09.12 00:36 bartekltg
- 26.09.12 01:28 bartekltg
- 26.09.12 01:31 kenobi
- 26.09.12 01:43 bartekltg
- 26.09.12 01:52 kenobi
- 26.09.12 10:23 M.M.
- 26.09.12 10:32 M.M.
- 26.09.12 10:35 M.M.
Najnowsze wątki z tej grupy
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
Najnowsze wątki
- 2025-07-14 granice
- 2025-07-14 Awaria VM?
- 2025-07-14 Gdańsk => Programista Kotlin <=
- 2025-07-14 Warszawa => Junior Rekruter <=
- 2025-07-14 Warszawa => Specjalista rekrutacji IT <=
- 2025-07-14 Wkłady do zniczy...
- 2025-07-14 Warszawa => Specjalista ds. Sprzętu Komputerowego <=
- 2025-07-14 Re: PO chroniło i chroni policyjnych bandziorów [zawiasy za katowanie obywatela (Poznań czerwiec 2012)]
- 2025-07-14 Warszawa => International Freight Forwarder <=
- 2025-07-14 Warszawa => Recruiter 360 <=
- 2025-07-14 Re: Rz?Âd ZAKAZUJE magazyn?Â?w energii ?!! Nowe prawo od 14 lipca to SZOK! ??Â
- 2025-07-14 Warszawa => Sales Assistant <=
- 2025-07-13 Fałszywe alerty
- 2025-07-12 dlaczego gadacie z tym debilem
- 2025-07-13 Unia Europejska przygotowuje nowy podatek