Statystyka - programowanie dynamiczne

Pytania o rozwiązania zadań.
Otrzymałeś(aś) rozwiązanie do zamieszczonego zadania? - podziękuj autorowi rozwiązania! Kliknij
M_A_T_R_I_X
Dopiero zaczynam
Dopiero zaczynam
Posty: 16
Rejestracja: 15 maja 2021, 14:08
Lokalizacja: Rybnik
Podziękowania: 3 razy
Płeć:

Statystyka - programowanie dynamiczne

Post autor: M_A_T_R_I_X »

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:
M_A_T_R_I_X
Dopiero zaczynam
Dopiero zaczynam
Posty: 16
Rejestracja: 15 maja 2021, 14:08
Lokalizacja: Rybnik
Podziękowania: 3 razy
Płeć:

Re: Statystyka - programowanie dynamiczne

Post autor: M_A_T_R_I_X »

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
J_u_s_t_y_n_a
Witam na forum
Witam na forum
Posty: 7
Rejestracja: 19 maja 2021, 05:04
Otrzymane podziękowania: 1 raz

Re: Statystyka - programowanie dynamiczne

Post autor: J_u_s_t_y_n_a »

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:

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()

]
M_A_T_R_I_X
Dopiero zaczynam
Dopiero zaczynam
Posty: 16
Rejestracja: 15 maja 2021, 14:08
Lokalizacja: Rybnik
Podziękowania: 3 razy
Płeć:

Re: Statystyka - programowanie dynamiczne

Post autor: M_A_T_R_I_X »

J_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ą.
Dziękuję J_u_s_t_y_n_a za próbe pomocy, lecz niestety obie te odpowiedzi sa nieprawidłowe :(

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
J_u_s_t_y_n_a
Witam na forum
Witam na forum
Posty: 7
Rejestracja: 19 maja 2021, 05:04
Otrzymane podziękowania: 1 raz

Re: Statystyka - programowanie dynamiczne

Post autor: J_u_s_t_y_n_a »

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ć.
Dim
Witam na forum
Witam na forum
Posty: 2
Rejestracja: 27 maja 2021, 16:54
Płeć:

Re: Statystyka - programowanie dynamiczne

Post autor: Dim »

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.
M_A_T_R_I_X
Dopiero zaczynam
Dopiero zaczynam
Posty: 16
Rejestracja: 15 maja 2021, 14:08
Lokalizacja: Rybnik
Podziękowania: 3 razy
Płeć:

Re: Statystyka - programowanie dynamiczne

Post autor: M_A_T_R_I_X »

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.
Dim a czy mógłbyś podzielić się tym Excelem, może pozwoli mi jakieś natchnienie znaleźć?
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
Dim
Witam na forum
Witam na forum
Posty: 2
Rejestracja: 27 maja 2021, 16:54
Płeć:

Re: Statystyka - programowanie dynamiczne

Post autor: Dim »

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 ;)
M_A_T_R_I_X
Dopiero zaczynam
Dopiero zaczynam
Posty: 16
Rejestracja: 15 maja 2021, 14:08
Lokalizacja: Rybnik
Podziękowania: 3 razy
Płeć:

Re: Statystyka - programowanie dynamiczne

Post autor: M_A_T_R_I_X »

Dim pisze: 29 maja 2021, 18:39 Odezwij się na priv.
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."

:(
white6
Witam na forum
Witam na forum
Posty: 1
Rejestracja: 16 gru 2023, 21:14
Płeć:

Re: Statystyka - programowanie dynamiczne

Post autor: white6 »

Cześć, temat już stary ale zadanie aktualne, ma ktoś może jeszcze plik Excela jak to rozwiązać? Przesłane pliki już nie istnieją
ODPOWIEDZ