Sivu 1/1

moniveto-ohjelman tekeminen

Lähetetty:
Kirjoittaja zack
Ongelmani seuraavanlainen: Olen itse laskenut otteluiden lopputuloksille kertoimet. Minkälainen ohjelma pitäisi väsätä että pääsen automaattisesti vertaamaan niitä veikkauksen kertoimiin? Onnistuuko homma exelillä vai tarvitaanko esim. virtual basicia tai muuta ohjelmaa? tai onko olemassa tallainen ohjelma valmiina jossaki?

Re: moniveto-ohjelman tekeminen

Lähetetty:
Kirjoittaja Berrie
zack kirjoitti:Ongelmani seuraavanlainen: Olen itse laskenut otteluiden lopputuloksille kertoimet. Minkälainen ohjelma pitäisi väsätä että pääsen automaattisesti vertaamaan niitä veikkauksen kertoimiin? Onnistuuko homma exelillä vai tarvitaanko esim. virtual basicia tai muuta ohjelmaa? tai onko olemassa tallainen ohjelma valmiina jossaki?
Lyhyesti sanottuna sinun on jollakin keinolla haettava kertoimet Veikkaukselta Exceliin.

Eli kertoimet omalle koneelle tiedostoon ja siitä sitten exceliin ja sitten vertailua. Tuo onnistuu Excelillä, tosin vaatinee VBA-ohjelmointia (Visual Basic for Applications). Excelissä on periaatteessa kaikki jutut mitkä VB:ssäkin eli sillä tulet varmasti pärjäämään.

Visual Basicia sinun on opeteltava. Avainjutut mitä tarvitset ovat tiedonhaku netistä ja tiedoston lukeminen/kirjoitus. Ei ole kovin vaikeita juttuja IMO.

Lähetetty:
Kirjoittaja zack
Juurikin visual basic oli ohjelma jota tarkoitin. Millainen kaava pitää tehdä että saan laskettua kertoimen jokaiselle tulosyhdistelmälle? Tulee pitkä projekti jos laskee yli 22000 kerrointa käsin :lol:

Lähetetty:
Kirjoittaja Berrie
Ohjelmointioppaasta seuraavaksi luettavat kappaleet on Taulukot ja Silmukat.

Eli noiden tulosyhdistelmien rajakertoimet kannattaa tunkea taulukkoon. Ja helpoiten ne siihen saa esim. FOR-silmukassa.

Lähetetty:
Kirjoittaja zack
Ja seuraavaksi sitten suunta kohti kirjastoa opuksia lainaamaan. Kiitoksia vinkeistä, luultavasti palaan vielä asiaan jossain vaiheessa jos/kun kysyttävää tulee.

Lähetetty:
Kirjoittaja Berrie
Netistä löytää varmasti ainakin saman verran tietoa kuin kirjastostakin. Pari suomalaista paikkaa joita tosin en itse liiemmin seuraile:

http://www.ohjelmointiputka.net
http://mureakuha.com

Ja Google tietenkin auttaa vaikka mihin vaivaan. Ja Googlesta kannattaa hyödyntää myös keskusteluryhmähakua.

Lähetetty:
Kirjoittaja Kem
Kun ilmeisesti palstaa lukee jokunen oman moniveto-ohjelman väsännyt henkilö, niin kiinnostaisi tietää, miten itse olette ratkaisseet ns. kuponkiryhmittelyn ongelman ohjelmassanne. Toisin sanoen, ylikertoimisista riveistä pitäisi saada tehtyä "kuponkikelpoisia" yhdistelmiä siten, että lappuja muodostuu mahdollisimman vähän. Eli esimerkkinä 2 kohteen jääkiekkomonarissa:
ylikertoimiset 6 riviä
2-1, 4-3
3-1, 4-3
3-0, 2-3
2-0, 4-3
2-0, 2-3
3-0, 4-3

jotka pitäisi saada muotoon
23-01, 4-3
23-0, 2-3
tjsp.

Itse olen tätä jonkinmoisilla ehtolauseviritelmillä koittanut väsätä, mutta varsinkin jalkapalloversiossa niitä tulee helposti niin paljon, että silmät menee ristiin jo koodatessakin. Tai sitten en vain osaa.

Lähetetty:
Kirjoittaja Berrie
Tuosta muistan cpsof95:n kommentoineen hieman:

viewtopic.php?p=16820#16820

Itse aikanani hieman mietin asiaa mutta koko monariohjelma jäi tekemättä niin en enemmälti asialla päätä vaivannut, mutta kiinnostus voisi vaikka herätä keskusteluun.

Lähetetty:
Kirjoittaja cpsof95
Juu, ei kyllä ole tullut mieleen mitään systeemiä, millä saisi minimoitua kuponkien määrän, jos on hirveä määrä monivetorivejä, jotka pitäisi pelata. Erilaisia vaihtoehtoja kuponkien muodostamiseen on tähtitieteellisiä määriä, joten olisi pakko olla joku selkeä algoritmi, joka muodostaisi rivit. Epäilen kyllä, ettei sellaista ole mahdollista luoda. Kyllä tässä ongelmassa melkoista luovuutta vaaditaan. Itse en ole pelaillut monivetoa, joten en ole ongelmaa tämän enempää pohtinut.

Rivit järjestelmiksi

Lähetetty:
Kirjoittaja power
En ole minäkään keksinyt mitään huippuhyvää keinoa, mutta suunnilleen tälläistä tapaa käytän
SBMpro - ohjelmassa. On ainakin yksinkertainen:


Oletetaan että yksittäisiä rivejä on n kappaletta.

Koodi: Valitse kaikki

0. MUUTOS = EPÄTOSI
1. Silmukka i = 1..n-1
   Alku (1)
2.   Silmukka j = i+1..n
     Alku (2)
      3. Jos rivi j ei ole merkitty käytetyksi, katsotaan voiko rivin j lisätä
         rivin i kanssa järjestelmäksi.   
      4. Jos voi niin lisätään ja merkitään rivi j käytetyksi sekä MUUTOS = TOSI.
         nyt rivi i sisältää järjestelmän i+j
     Loppu (2)
   Loppu (1)
5. Poistetaan käytetyt rivit.
6. Uusi n on nyt jäljellä olevat rivit + muodostetut järjestelmät.
7. Jos MUUTOS = TOSI niin hypätään kohtaan 0. , muuten valmis.
Joitakin optimointeja muistaakseni tuohon voi tehdä, mutta kyllähän tuo hidastuu rivimäärän kasvaessa aika lailla.
Ja sitä paremmin toimii, mitä lähempänä eri rivit ovat toisiaan. Kyllä tuolla jonkin verran saan supistettua rivimäärää.

Jos jollakulla on parempia ehdotuksia, niin olisi kyllä hieno kuulla.

Lähetetty:
Kirjoittaja gary
SBMpro:n moniveto-ohjelma onkin mainio tekele. Se toimii niinkuin pitääkin ja onkin ainut syy miksi pelaan monivetoa.

Lähetetty:
Kirjoittaja cpsof95
Jos nyt oikein ymmärsin, niin tuo powerin algoritmi muodostaa vain sellaisia järjestelmiä, jossa ainoastaan yhdessä kohteessa on useita vaihtoehtoja.

Lähetetty:
Kirjoittaja power
cpsof95 kirjoitti:Jos nyt oikein ymmärsin, niin tuo powerin algoritmi muodostaa vain sellaisia järjestelmiä, jossa ainoastaan yhdessä kohteessa on useita vaihtoehtoja.
Ensimmäisellä kierroksellä näin tosiaan on. Mutta kaikilla muilla siinä on mukana ne aikaisemmin yhdistetyt järjestelmät jotka taas voivat yhdistyä keskenään jne.

Ei tuo aina anna hirivittävän hyviä tuloksia. Esim. tämän päivän monari: tein 229 riviä, järjestelmiä niistä tuli 99 kpl.

Lähetetty:
Kirjoittaja VJR
Tämä on kyllä vanha ketju, mutta törmäsin tuohon rivien yhdistelyyn omissa koodauksissa ja eksyin tänne. Pienen taistelun jälkeen sain väsättyä algoritmin, joka osaa mielestäni ihan hyvin yhdistellä pelattavat rivit (Tulosvedon) järjestelmiksi.

Algoritmi toimii siten, että etsitään aina jäljellä olevista tuloksista suurin mahdollinen järjestelmä (siis järjestelmä, joka tuottaisi eniten rivejä). Tämän jälkeen poistetaan jäljellä olevista riveistä tämän löydetyn suurimman järjestelmän rivit ja jatketaan loppuun asti.

Suurin ongelma tuossa oli, miten löydetään suurin mahdollinen järjestelmä. Minä toteutin sen niin, että kaikki mahdolliset tulokset muodostavat ikäänkuin bittitaulukon, jossa 0 vastaa pelaamatonta riviä ja 1 pelattavaa.

Tyyliin:

Koodi: Valitse kaikki

  0123  (kotijoukkueen maalit)

0 0101
1 0010
2 1000
3 0101
(vaakarivit vastaa vierasjoukkueen maaleja)

Ylläolevan taulukon peli sisältäisi tulokset 1-0,3-0,2-1,0-2,1-3,3-3.

Tämän jälkeen luodaan maskit, joiden avulla rivejä voidaan yhdistellä. Maskilla tarkoitetaan mahdollisen järjestelmän kotijoukkueen maalilukuja. Esim. maski "0101" tarkoittaa, että järjestelmässä olisi mukana kotijoukkueen maalimäärät 1 ja 3. Maskien luonnissa taulukkoa luetaan vaakariveittäin. Esim ylläolevassa esimerkissä luodaan maskit "0101","0100", "0001","0010", "0010", "1000" sekä "0101","0100" ja "0001" toisen kerran. "0100" ja "0001" on muodostettu tekemällä kaikki mahdolliset kombinaatiot vaakarivin "0101" ykkösistä.

Sen jälkeen käydään taulukko läpi kaikilla muodostetuilla maskeilla ja lasketaan montako riviä mikäkin järjestelmä tuottaisi. Esim. maskin "0101" järjestelmä sopisi vaakarivien riveille 0 ja 3. Joten voitaisiin luoda järjestelmä 13-03. Se onkin esimerkissä suurin mahdollinen järjestelmä ja sen jälkeen algortimi jatkaisi samaa rataa lähtien taulukosta:

Koodi: Valitse kaikki

  0123

0 0000
1 0010
2 1000
3 0000