Najwyzsza wartosc dla danych z pliku

Najwyzsza wartosc dla danych z pliku
K2
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 4 lata
  • Postów:52
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

Kopiuj
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.

edytowany 1x, ostatnio: Patryk27
Pyxis
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 godziny
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ą.

lion137
Też właśnie nie rozumiem.
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 3 godziny
  • Postów:3871
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:

Kopiuj
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

edytowany 1x, ostatnio: Panczo
K2
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 4 lata
  • Postów:52
0

Ok to doprecyzuje

Przykład
Założenia nr 1

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

Założenia nr 2

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

Dane. Dedalem kilka wierszy

Kopiuj
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

edytowany 1x, ostatnio: Kenshin206
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 3 godziny
  • Postów:3871
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:

Kopiuj
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

edytowany 1x, ostatnio: Panczo
K2
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 4 lata
  • Postów:52
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

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 3 godziny
  • Postów:3871
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ć...

bearek
  • Rejestracja:prawie 5 lat
  • Ostatnio:około rok
  • Postów:85
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?

BZ
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:66
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.

edytowany 1x, ostatnio: bootcamp_z_czarnej_listy
K2
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 4 lata
  • Postów:52
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

BZ
No to dodajesz HAVING sum(k11) > 2500 i masz tylko rozwiązania które mają sumę większą niż 2500.
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 3 godziny
  • Postów:3871
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:

Kopiuj
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.

edytowany 2x, ostatnio: Panczo
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)