Statystyka - programowanie dynamiczne
Otrzymałeś(aś) rozwiązanie do zamieszczonego zadania? - podziękuj autorowi rozwiązania! Kliknij
-
- Dopiero zaczynam
- Posty: 16
- Rejestracja: 15 maja 2021, 14:08
- Lokalizacja: Rybnik
- Podziękowania: 3 razy
- Płeć:
Statystyka - programowanie dynamiczne
Witam wszystkich forumowiczów
Czy mógłby mi ktoś pomóc rozwiązując 2 poniższe zadania krok po kroku, chciałbym bardzo zrozumieć sposób ich rozwiązania, a niestety ze smutkiem przyznaję że nie potrafię
w załączniku screeny zadań
z góry dziękuję za wszelaką pomoc
Zadanie.1
Rozdzielić na trzy oddziały A, B, C dodatkową produkcję w ilości 400.
W tabeli podano dodatkowe zyski, jakie wygenerują oddziały po przydzieleniu zlecenia.
Oddział 0 50 100 150 200 250
A 0 87 136 206 252 330
B 0 88 230 278 367 409
C 0 138 264 399 579 651
W przypadku więcej niż jednego rozwiązania optymalnego wybrać rozwiązanie optymalne preferowane,
w którym najwięcej przeznacza się na C, potem na B, potem na A.
Maksymalny zysk?:
Przydział na A:
Przydział na B:
Przydział na C:
Zadanie.2
Rozdzielić na trzy oddziały A, B, C dodatkową produkcję w ilości 400.
W tabeli podano dodatkowe koszty jakie wygenerują oddziały po przydzieleniu zlecenia.
Oddział 0 50 100 150 200 250
A 0 87 136 206 252 330
B 0 88 230 278 367 409
C 0 138 264 399 579 651
W przypadku więcej niż jednego rozwiązania optymalnego wybrać rozwiązanie optymalne preferowane,
w którym najwięcej przeznacza się na C, potem na B, potem na A.
Minimalny koszt?:
Przydział na A:
Przydział na B:
Przydział na C:
Czy mógłby mi ktoś pomóc rozwiązując 2 poniższe zadania krok po kroku, chciałbym bardzo zrozumieć sposób ich rozwiązania, a niestety ze smutkiem przyznaję że nie potrafię
w załączniku screeny zadań
z góry dziękuję za wszelaką pomoc
Zadanie.1
Rozdzielić na trzy oddziały A, B, C dodatkową produkcję w ilości 400.
W tabeli podano dodatkowe zyski, jakie wygenerują oddziały po przydzieleniu zlecenia.
Oddział 0 50 100 150 200 250
A 0 87 136 206 252 330
B 0 88 230 278 367 409
C 0 138 264 399 579 651
W przypadku więcej niż jednego rozwiązania optymalnego wybrać rozwiązanie optymalne preferowane,
w którym najwięcej przeznacza się na C, potem na B, potem na A.
Maksymalny zysk?:
Przydział na A:
Przydział na B:
Przydział na C:
Zadanie.2
Rozdzielić na trzy oddziały A, B, C dodatkową produkcję w ilości 400.
W tabeli podano dodatkowe koszty jakie wygenerują oddziały po przydzieleniu zlecenia.
Oddział 0 50 100 150 200 250
A 0 87 136 206 252 330
B 0 88 230 278 367 409
C 0 138 264 399 579 651
W przypadku więcej niż jednego rozwiązania optymalnego wybrać rozwiązanie optymalne preferowane,
w którym najwięcej przeznacza się na C, potem na B, potem na A.
Minimalny koszt?:
Przydział na A:
Przydział na B:
Przydział na C:
-
- Dopiero zaczynam
- Posty: 16
- Rejestracja: 15 maja 2021, 14:08
- Lokalizacja: Rybnik
- Podziękowania: 3 razy
- Płeć:
Re: Statystyka - programowanie dynamiczne
Teraz mi trudno odpowiedzieć, czy zadania są rzeczywiście takie trudne czy po prostu takie czasochłonne,
ja też próbowałem wielu rozwiązań, ale niestety z niepowodzeniem, obawiam się że się nawet zapętliłem
i to co w ogóle robię to chyba nie ten kierunek...
wciąż czekam na jakąś "dobrą duszyczkę" która mi w tym pomoże
W załączeniu dołączam plik ms excel z moimi obliczeniami, może chociaż jakaś dobra duszyczka doradzi co powinienem poprawić...?
https://drive.google.com/file/d/13s5kWH ... sp=sharing
ja też próbowałem wielu rozwiązań, ale niestety z niepowodzeniem, obawiam się że się nawet zapętliłem
i to co w ogóle robię to chyba nie ten kierunek...
wciąż czekam na jakąś "dobrą duszyczkę" która mi w tym pomoże
W załączeniu dołączam plik ms excel z moimi obliczeniami, może chociaż jakaś dobra duszyczka doradzi co powinienem poprawić...?
https://drive.google.com/file/d/13s5kWH ... sp=sharing
-
- Witam na forum
- Posty: 7
- Rejestracja: 19 maja 2021, 05:04
- Otrzymane podziękowania: 1 raz
Re: Statystyka - programowanie dynamiczne
Rozwiązałam to, ale nie sposobem z excela, lecz alternatywnym sposobem w solwerze optymalizacyjnym jako Mixed-Integer Linear Problem (kod w formacie Python Jupyter Notebook .ipynb). Wklejam kod oraz wyniki, mam nadzieję, że pomogą.
Wynik solwera dla zysków:
Model: zyski_pwl
- number of variables: 6
- binary=0, integer=0, continuous=6
- number of constraints: 1
- linear=1
- parameters: defaults
- objective: maximize
- problem type is: MILP
objective: 968.000
prodA=50.000
prodB=100.000
prodC=250.000
Wynik solwera dla kosztów:
Model: koszty_pwl
- number of variables: 6
- binary=0, integer=0, continuous=6
- number of constraints: 4
- linear=4
- parameters: defaults
- objective: minimize
- problem type is: MILP
objective: 608.000
prodA=250.000
prodB=150.000
Kod zawiera sformułowanie modelu (zmienne, ograniczenia w postaci liniowej, funkcja optymalizowana w postaci kawałkami liniowej). prodA - ilość wyprodukowana w zakładzie A, prodB, prodC analogicznie. "Objective" - maksymalny zysk lub minimalny koszt:
Wynik solwera dla zysków:
Model: zyski_pwl
- number of variables: 6
- binary=0, integer=0, continuous=6
- number of constraints: 1
- linear=1
- parameters: defaults
- objective: maximize
- problem type is: MILP
objective: 968.000
prodA=50.000
prodB=100.000
prodC=250.000
Wynik solwera dla kosztów:
Model: koszty_pwl
- number of variables: 6
- binary=0, integer=0, continuous=6
- number of constraints: 4
- linear=4
- parameters: defaults
- objective: minimize
- problem type is: MILP
objective: 608.000
prodA=250.000
prodB=150.000
Kod zawiera sformułowanie modelu (zmienne, ograniczenia w postaci liniowej, funkcja optymalizowana w postaci kawałkami liniowej). prodA - ilość wyprodukowana w zakładzie A, prodB, prodC analogicznie. "Objective" - maksymalny zysk lub minimalny koszt:
Kod: Zaznacz cały
[
# With Python optimization libraries (CPLEX - Community Edition and docplex )
import sys
try:
import cplex
except:
if hasattr(sys, 'real_prefix'):
#we are in a virtual env.
!pip install cplex
else:
!pip install --user cplex
import sys
try:
import docplex.mp
except:
if hasattr(sys, 'real_prefix'):
#we are in a virtual env.
!pip install docplex
else:
!pip install --user docplex
from docplex.mp.model import Model
# Dodatkowe zyski - kawałkami liniowo
# Display matplotlib plots in the notebook
%matplotlib inline
# create a new model to attach piecewise
pm = Model(name='zyski_pwl')
pwf_zyskiA = pm.piecewise(preslope=0, breaksxy=[(0, 0), (50, 87), (100, 136),(150, 206),(200, 252),(250, 330)], postslope=0)
# plot the function
pwf_zyskiA.plot(lx=-1, rx=300, k=1, color='b', marker='s', linewidth=2)
pwf_zyskiB = pm.piecewise(preslope=0, breaksxy=[(0, 0), (50, 88), (100, 230),(150, 278),(200, 367),(250, 409)], postslope=0)
# plot the function
pwf_zyskiB.plot(lx=-1, rx=300, k=1, color='r', marker='s', linewidth=2)
pwf_zyskiC = pm.piecewise(preslope=0, breaksxy=[(0, 0), (50, 138), (100, 264),(150, 399),(200, 579),(250, 651)], postslope=0)
# plot the function
pwf_zyskiC.plot(lx=-1, rx=300, k=1, color='y', marker='s', linewidth=2)
prodA = pm.continuous_var(name='prodA')
prodB = pm.continuous_var(name='prodB')
prodC = pm.continuous_var(name='prodC')
zyskiA = pwf_zyskiA(prodA)
zyskiB = pwf_zyskiB(prodB)
zyskiC = pwf_zyskiC(prodC)
pm.add_constraint(400 == prodA + prodB + prodC)
pm.maximize(zyskiA + zyskiB + zyskiC)
pm.print_information()
pm_solution= pm.solve(log_output=False)
assert pm_solution
pm.print_solution()
# Dodatkowe koszty - kawałkami liniowo
pm3 = Model(name='koszty_pwl')
pwf_kosztyA = pm3.piecewise(preslope=0, breaksxy=[(0, 0), (50, 87), (100, 136),(150, 206),(200, 252),(250, 330)], postslope=0)
pwf_kosztyB = pm3.piecewise(preslope=0, breaksxy=[(0, 0), (50, 88), (100, 230),(150, 278),(200, 367),(250, 409)], postslope=0)
pwf_kosztyC = pm3.piecewise(preslope=0, breaksxy=[(0, 0), (50, 138), (100, 264),(150, 399),(200, 579),(250, 651)], postslope=0)
prodA = pm3.continuous_var(name='prodA')
prodB = pm3.continuous_var(name='prodB')
prodC = pm3.continuous_var(name='prodC')
kosztyA = pwf_kosztyA(prodA)
kosztyB = pwf_kosztyB(prodB)
kosztyC = pwf_kosztyC(prodC)
pm3.add_constraint(400 == prodA + prodB + prodC)
pm3.add_constraint(250 >= prodA )
pm3.add_constraint(250 >= prodB )
pm3.add_constraint(250 >= prodC )
pm3.minimize(kosztyA + kosztyB + kosztyC)
pm3.print_information()
pm3_solution= pm3.solve(log_output=False)
assert pm3_solution
pm3.print_solution()
]
-
- Dopiero zaczynam
- Posty: 16
- Rejestracja: 15 maja 2021, 14:08
- Lokalizacja: Rybnik
- Podziękowania: 3 razy
- Płeć:
Re: Statystyka - programowanie dynamiczne
Dziękuję J_u_s_t_y_n_a za próbe pomocy, lecz niestety obie te odpowiedzi sa nieprawidłoweJ_u_s_t_y_n_a pisze: ↑19 maja 2021, 05:34 Rozwiązałam to, ale nie sposobem z excela, lecz alternatywnym sposobem w solwerze optymalizacyjnym jako Mixed-Integer Linear Problem (kod w formacie Python Jupyter Notebook .ipynb). Wklejam kod oraz wyniki, mam nadzieję, że pomogą.
Zyski:
https://drive.google.com/file/d/1UY3B2S ... sp=sharing
Koszty:
https://drive.google.com/file/d/1J1QSFm ... sp=sharing
Jeżeli mógłby ktoś spróbować pomóc, to bardzo proszę
Pozdrowienia dla wszystkich forumowiczów
-
- Witam na forum
- Posty: 7
- Rejestracja: 19 maja 2021, 05:04
- Otrzymane podziękowania: 1 raz
Re: Statystyka - programowanie dynamiczne
Wyniki z mojej odpowiedzi były podane w setkach (użyłam notacji z kropką oddzielającą miejsce po przecinku): objective: 968 prodA=50 prodB=100 prodC=250 etc. Na powyżej podlinkowanych screenach są wpisane w setkach tysięcy, więc można jeszcze ewentualnie to sprawdzić.
Re: Statystyka - programowanie dynamiczne
Cześć,
Wyliczyłem to w excelu, wynik mam dokładnie taki sam jak Justyna, choć test na moodlu pokazuje, że jest błędny.
Zysk - 968 , A 50, B 100, C 250
Koszt - 608, A 250, B 150, C 0
Ponieważ pan dr nie miał w swoich przykładach wartości większej niż wartości przydziału opcje są dwie:
- istnieje dodatkowe rozwiązanie, które nie zostało zaprezentowane
- pytanie jest niepoprawnie skonstruowane (w poprzednich też zdarzały się błędy) - choć w opcji z zyskiem zalicza odpowiedzi 50,100,250, tak ich wartości już nie - 87 + 230 + 651 = 968. Dlatego myślę, że jednak z tym nic nie zrobimy.
Wyliczyłem to w excelu, wynik mam dokładnie taki sam jak Justyna, choć test na moodlu pokazuje, że jest błędny.
Zysk - 968 , A 50, B 100, C 250
Koszt - 608, A 250, B 150, C 0
Ponieważ pan dr nie miał w swoich przykładach wartości większej niż wartości przydziału opcje są dwie:
- istnieje dodatkowe rozwiązanie, które nie zostało zaprezentowane
- pytanie jest niepoprawnie skonstruowane (w poprzednich też zdarzały się błędy) - choć w opcji z zyskiem zalicza odpowiedzi 50,100,250, tak ich wartości już nie - 87 + 230 + 651 = 968. Dlatego myślę, że jednak z tym nic nie zrobimy.
-
- Dopiero zaczynam
- Posty: 16
- Rejestracja: 15 maja 2021, 14:08
- Lokalizacja: Rybnik
- Podziękowania: 3 razy
- Płeć:
Re: Statystyka - programowanie dynamiczne
Dim a czy mógłbyś podzielić się tym Excelem, może pozwoli mi jakieś natchnienie znaleźć?Dim pisze: ↑27 maja 2021, 17:08 Cześć,
Wyliczyłem to w excelu, wynik mam dokładnie taki sam jak Justyna, choć test na moodlu pokazuje, że jest błędny.
Zysk - 968 , A 50, B 100, C 250
Koszt - 608, A 250, B 150, C 0
Ponieważ pan dr nie miał w swoich przykładach wartości większej niż wartości przydziału opcje są dwie:
- istnieje dodatkowe rozwiązanie, które nie zostało zaprezentowane
- pytanie jest niepoprawnie skonstruowane (w poprzednich też zdarzały się błędy) - choć w opcji z zyskiem zalicza odpowiedzi 50,100,250, tak ich wartości już nie - 87 + 230 + 651 = 968. Dlatego myślę, że jednak z tym nic nie zrobimy.
Bardzo proszę
Niestety jednak i ta odpowiedz jest niepoprawna
https://drive.google.com/file/d/1_vx1oS ... sp=sharing
Natomiast przy ZYSKAch jest już prawie dobrze
https://drive.google.com/file/d/1-5F8a9 ... sp=sharing
Re: Statystyka - programowanie dynamiczne
Odezwij się na priv.
Jak mówiłem wyniki są poprawne, moodle liczy je jeko błędne.
Dla pierwszego uznaje wynik A:200, B:0, C:200.
A wg excela nie jest to za dobre rozwiązanie
Jak mówiłem wyniki są poprawne, moodle liczy je jeko błędne.
Dla pierwszego uznaje wynik A:200, B:0, C:200.
A wg excela nie jest to za dobre rozwiązanie
-
- Dopiero zaczynam
- Posty: 16
- Rejestracja: 15 maja 2021, 14:08
- Lokalizacja: Rybnik
- Podziękowania: 3 razy
- Płeć:
Re: Statystyka - programowanie dynamiczne
Niestety Dim, chyba jestem za krótko stażem na forum, ponieważ:
"Tworzenie wiadomości
Przepraszamy, ale nie masz uprawnień do używania tej funkcji. Aby używać tej i innych funkcji, musisz się zarejestrować lub brać udział w dyskusjach."
Re: Statystyka - programowanie dynamiczne
Cześć, temat już stary ale zadanie aktualne, ma ktoś może jeszcze plik Excela jak to rozwiązać? Przesłane pliki już nie istnieją