Najwyzsza wartosc dla danych z pliku

0

Witam

Próbowałem rozwiązać ten problem za pomocą SQL ale niestety nie udało mi się.
W PYTHONIE jestem początkujący i liczę na pomoc formumowiczow w napisaniu Kodu który pomoże rozwiązać mi problem.
Do rzeczy

Mam CSV w którym mam kilkaset tysięcy danych poniżej załączam cząstkę z nich

K1	K2	K3	K4	K5	K6	K7	K8	K9	K10	K11
1	2.4	TAK	NIE	10%	7	8	33	22	1	1000
1	2.3	NIE	TAK	9%	6	7	3	11	2	1200
2	2.1	TAK	TAK	9%	9	9	9	9	8	1150
2	2.0	TAK	NIE	8%	4	8	8	8	8	1300
2	1.9	NIE	TAK	7%	8	83	3	4	3	1400
3	1.9	NIE	TAK	7%	8	83	3	5	3	1500
3	2.0	NIE	TAK	7%	8	83	3	4	3	1000
4	2.3	NIE	TAK	9%	6	7	3	11	2	1100
4	2.3	NIE	NIE	9%	2	7	4	7	3	1200

Kazda kolumna odpowiada parametrom które muszę usawic tak zeby suma k11 byla jak najwyższa i w danym tygodniu musi być większa od 2500
Kolumna K1 to tydzień
Kolumna k2 to parametr ktory musi byc z przedziału 2do3
kolumna k3 musi byc na TAK
kolumna k4 dowolna
kolumna k5 dowolna
kolumna k6 Pomiedzy 3do9
kolumna k7 pomiędzy 1do100
kolumna k8 dowolna
kolumna k9 od 1do20
kolumna k10 dowolna

I teraz muszę napisać kod który dobierze mi tak parametry k1,k2.... tak aby k11 byl max

Przykład
bierzemy k2=2 k3=TAK k4=TAK k5=1% k6=3 k7=1 k8=1 k9=1 k10=1 i liczymy ile będzie tygodni które dadzą nam wynik powyżej 2500. Całość k11 zapisujemy i przechodzimy dalej do następnej iteracji k2=2.1 k3=TAK k4=TAK k5=1% k6=3 k7=1 k8=1 k9=1 k10=1 itd.

Zadaniem jest tak dobranie parameter k1,k2,k3,,, aby mieściły sie w założeniach ogólnych i daly jak największa sume k11.

0

Nie zrozumiałem, jak liczyć tę sumę. Bo jeśli suma z K11 ma być jak największa, to wystarczy ustawić na każdej kolumnie wartość maksymalną.

0

Przeniosłeś wątek do nowego działu, ale ciągle nie opisujesz problemu...

Jest kilka wątpliwości:

  1. I teraz muszę napisać kod który dobierze mi tak parametry k1,k2.... tak aby k11 byl max
  2. bierzemy k2=2 k3=TAK k4=TAK k5=1% k6=3 k7=1 k8=1 k9=1 k10=1 i liczymy ile będzie tygodni które dadzą nam wynik powyżej 2500
  3. aby mieściły sie w założeniach ogólnych i daly jak największa sume k11.
  4. liczymy ile będzie tygodni które dadzą nam wynik powyżej 2500

Raz piszesz o max, raz o sumie, kolejny raz o liczbie tygodni, za bardzo nie wiadomo jak to ogarnąć, więc może rozpisz to na czynniki:

bierzemy k2=2 k3=TAK k4=TAK k5=1% k6=3 k7=1 k8=1 k9=1 k10=1 i liczymy ile będzie tygodni które dadzą nam wynik powyżej 2500

No to biorę i usuwam te nie pasujące do założen ogólnych:

K1  K2  K3  K4  K5  K6  K7  K8  K9  K10 K11
2   2.0 TAK NIE 8%  4   8   8   8   8   1300
3   2.0 NIE TAK 7%  8   83  3   4   3   1000

no to mam 2 tygodnie nie pasujące sumą do założeń.

Prorponuje podac taką próbkę danych, aby czytelnie można było na nich przeprowadzić proces na który chcesz znaleźć rozwiązanie

0

Ok to doprecyzuje

Przykład
Założenia nr 1

k2=2 k3=TAK k4=TAK k5=1% k6=3 k7=1 k8=1 k9=1 k10=1

Założenia nr 2

k2=2.1 k3=TAK k4=TAK k5=1% k6=3 k7=1 k8=1 k9=1 k10=1

Dane. Dedalem kilka wierszy

K1  K2  K3  K4  K5  K6  K7  K8  K9  K10 K11
1   2.4 TAK NIE 10% 7   8   33  22  1   1000
1   2.3 NIE TAK 9%  6   7   3   11  2   1200
2   2.1 TAK TAK 9%  9   9   9   9   8   1150
2   2.0 TAK NIE 8%  4   8   8   8   8   1300
2   1.9 NIE TAK 7%  8   83  3   4   3   1400
3   1.9 NIE TAK 7%  8   83  3   5   3   1500
3   2.0 NIE TAK 7%  8   83  3   4   3   1000
4   2.3 NIE TAK 9%  6   7   3   11  2   1100
4   2.3 NIE NIE 9%  2   7   4   7   3   1200,
5   2.0 TAK TAK 1% 3   1    1   1   1   1200   ( SPEŁNIA ZAŁOŻENIA NR 1)
5   2.0 TAK TAK 1% 3   1    1   1   1   1400   ( SPEŁNIA ZAŁOŻENIA NR 1)
5   1.9 TAK TAK 1% 3   1    1   1   1   1400
6   2.1 TAK TAK 1% 3   1    1   1   1   2800   ( SPEŁNIA ZAŁOŻENIA NR 2)
6   2.1 TAK TAK 1% 4   1    1   1   1   1000
6   2.0 TAK TAK 1% 3   1    1   1   1   1200   ( SPEŁNIA ZAŁOŻENIA NR 1)
6   2.0 TAK TAK 1% 3   1    1   1   1   1400   ( SPEŁNIA ZAŁOŻENIA NR 1)

Wynik dla założeń nr 1 = 5200
wynik dla założeń nr 2 = 2800

I teraz potrzebuje dobrać tak te parametry aby suma k11 była max dla wierszy które spełniają te założenia.
Skok k2 o 0.1 , k5 o 1% w pozostałych o 1

0

No to nie potrzebujesz dobierać parametrow o jakiś skok, jak już pisałem w wątku o mssql pobierz to do tabeli dane, a później zwykły group by:

select k2,k3,k4,k5,k6,k7,k8,k9,k10,sum(k11) from dane 
group by k2,k3,k4,k5,k6,k7,k8,k9,k10
order by 10 desc

https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=87081fe536aba0a89c513d3036fb8c80

0

No nie do konca

Musze miec wynik sumy k11 dla poszczegolnych parametrow ( np dla zalozen nr 1 i zalozen nr 2)

zalozenie nr 1 - wynik taki
zalozenie nr 2 - wynik taki
zalozenie nr 3 - wynik taki
itd

I na tej podstawie wybrac max wartosc

W nastopnym roku bede sie opieral o wyniki z poprzedniego roku

0

załóż że dla parametrow których nie znajdziesz to jest 0, bo skoro w w danych (opieram się na twoich z osttniego posta) nie ma np. 2.2 to k11 = 0.

Skoro opiermy się na danych to nie ma sensu sprawdzać wszystkich możliwych kombinacji tylko te które faktycznie wynikają z danych, jak jakiś nie ma to po co to wyliczać...

0

Gdy piszesz np. "Kolumna k2 to parametr ktory musi byc z przedziału 2do3", to znaczy że inne wartości mogą wystąpić i mają być odrzucone, czy wszystkie rekordy spełniają ten wymóg?

0

Co jest złego w rozwiązaniu @Panczo ? Grupujesz po kolumnach i sumujesz k11 a potem łączysz z tabelą z założeniami. Potem możesz sobie robić jakieś operacje z danymi z poprzednich lat.

0

@Panczo: Dzieki za podeslanie rozwiazania jednak nie do konca mi o to chodzilo. W skrocie musze poznac parametry dla najwiekszego k11 z danych tygodni. Najlepiej jak by bylo to rozwiazane petla ktora by sprawdzala kazdy parametr o 1 skok.
@bearek: Tak wystepuja takie rekordy i maja nie byc brane pod uwage
@bootcamp_z_czarnej_listy: Dlatego ze w danym tygodniu interesuja mnie tylko te ktore maja powyzej 2500. W tym rozwiazaniu jak bede mial 25 wierszy po 100 w k11 to on tez to policzy jako poprawny wynik

1

Dzieki za podeslanie rozwiazania jednak nie do konca mi o to chodzilo. W skrocie musze poznac parametry dla najwiekszego k11 z danych tygodni. Najlepiej jak by bylo to rozwiazane petla ktora by sprawdzala kazdy parametr o 1 skok.

Znowu mam wrażenie, że coś jest niedopowiedziane, przy liczeniu nie patrzę na tygodnie, zgodnie z Twoim wywowdem:

5   2.0 TAK TAK 1% 3   1    1   1   1   1200   ( SPEŁNIA ZAŁOŻENIA NR 1)
5   2.0 TAK TAK 1% 3   1    1   1   1   1400   ( SPEŁNIA ZAŁOŻENIA NR 1)
6   2.0 TAK TAK 1% 3   1    1   1   1   1200   ( SPEŁNIA ZAŁOŻENIA NR 1)
6   2.0 TAK TAK 1% 3   1    1   1   1   1400   ( SPEŁNIA ZAŁOŻENIA NR 1)

mam tydzien 5 i 6 więc jak to się ma do sumy, zresztą sam piszesz (pogrubienia moje)

liczymy ile będzie tygodni które dadzą nam wynik powyżej 2500.

a w następnym poscie:

Wynik dla założeń nr 1 = 5200

To wynik 5200 czy 2 tygodnie po 2600, czy tydzien 5 2600 i tydzien 6 2600?

Dodatkowo wg założeń niektóre kolumny maja być dowolne, to jaki jest sens je brać pod uwagę podczas wyliczeń?
Jaki w ogóle jest sens liczenia dla wartości których nie masz?
Co determinuje tą kolejnosc tych założeń, bo skoro k6 ma być między 3-9 a k2 między 2-3, to ja rozumiem jako iloczyn kartezjanski zbiorów i liczysz dla wszystkich możliwych par: 2.0,3 2.0,4 2.0,5 2.0,6 2.0,7 itd.

Zafiksowałeś się na pętli, a ciągle nie przedstawiłeś tego co naprawdę chcesz osiągnąć. Więc może zamiast skupiać się nad sugerowniem sposobu rozwiązania, skup się na tym co chcesz uzyskać, bo szklanej kuli nikt tu nie ma.

1 użytkowników online, w tym zalogowanych: 0, gości: 1