• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Trial & Error vraagstuk voor vinden beste match-ups

Status
Niet open voor verdere reacties.
Ik heb nu alles in zijn plaats, echter krijg ik nu (zelf bij het downloaden van een oud bestand dat door jouw is opgezet) een "automatiseringsfout" in de VBA. In de bijlage heb ik dit nieuwe bestand met tiebreakers gezet waar ik de foutmelding krijg.
 

Bijlagen

  • Foutmelding VBA.xlsm
    173,5 KB · Weergaven: 25
ik heb nogmaals van nul begonnen.
Dus is het vooral kijken naar die tabel met de beste resultaten, de rest zal ik straks wel weer in orde brengen.
Als je die vergelijkt met de vorige, dan scoor ik beduidend beter.

Bv. vioor 8 spelers zie je daar (geel gemarkeerd)
* bij tot : 1 duo komt 3 keer terug, 14 andere 2 keer en de 29 andere duo's 1 keer
* voor de tegenspelers : 4 duo's spelen 2 keer tegen elkaar, 28 andere duo's 1 keer
* voor de ploegmaten : 4 duo's spelen 2 keer samen, 16 duo's 1 keer.
Denk dat er daar straks niet veel meer zal kunnen aan verbeterd worden, hooguit in de marge

Verder heb ik nog niet naar bovengemelde fout gekeken.
 

Bijlagen

  • voetbalcompetitie.xlsb
    509,9 KB · Weergaven: 16
  • Aantekening 2020-09-14 020605.png
    Aantekening 2020-09-14 020605.png
    11,3 KB · Weergaven: 19
Laatst bewerkt:
"Als je die vergelijkt met de vorige, dan scoor ik beduidend beter."

Super, ik zie in ieder geval dat je de tegenspelers en medespelers hebt uitgesplitst, dus zijn de 1e en 2e tiebreakers. Heb je daarnaast de 3de en 4de tiebreakers ook geïmplementeerd of wel dat 3x tegenspeler beter is dan 3x medespeler en 2x tegenspeler is beter dan 2x medespeler? Het lijkt er wel op aangezien je tegenspeler voor medespeler hebt gezet maar weet dit niet 100% zeker. Daarnaast vroeg ik me af waar de 1 voor de Tot in staat bij de 6 spelers.

Ik weet niet of dit aan mij ligt, maar ik zie wel een heleboel spelers met nummer "0" (zie bijlage).

Daarnaast krijg ik een compileerfout als ik een nieuw speelschema wil aanmaken. Ik heb het gevoel dat dit alleen voor mij is, alsof er nog iets in mijn macro staat van vorige keren. Ik heb dus echt geen kennis van macro's, dus misschien dat ik iets dat heel algemeen bekend is over het hoofd zie. In de bijlage staat de specifieke foutmelding die ik krijg.
 

Bijlagen

  • Compileerfout VBA.PNG
    Compileerfout VBA.PNG
    4,5 KB · Weergaven: 11
  • Speler 0.PNG
    Speler 0.PNG
    24,8 KB · Weergaven: 24
ik ben toch eventjes in de fout gegaan deze morgen, ik maakte een onderscheid tussen een duo A_B en een duo B_A, dus beiden telde ik apart, wat 1 en ander gemakkelijker maakte.

Hierbij een nieuwe file, ik hoop nu, dat je die foutmelding niet meer tegenkomt, want die kan ik niet thuisbrengen. Wat deed je er net voor ?
Om even uit te leggen hoe het werkt :
- vooraf heb ik alle mogelijke combinaties gemaakt met de macro "Voorbereiding_12_Spelers", zodat bepaalde zaken geen tig keer opnieuw herrekend moesten worden.
- je mag in "wedstrijdblad" even Y2:Y8 leegmaken en dan de waarde van AB1 veranderen in 10, 100, 1.000, 10.000, eventueel nog hoger (als je tijd hebt) en dan telkens op de knop "Zoek beste oplossing voor spelers 6-12" drukken. (de voortgang van de macro kan je volgen op de statusbalk van excel, linksonder in)
Op die manier wordt telkens voor die spelersaantallen, zo vaak een oplossing gezocht en in geval die beter was dan de vorige oplossing, dan wordt die naar die tabel in R2:Y8 doorgekopieerd.
- je kan ook voor 1 bepaald spelersaantal die bewerking maken met die andere knop, als je dat doet voor "9", dan kom je iets uit zoals onderstaande screenshot.
Eigenlijk moet je die zien als 1 grote sortering met 10 sorteersleutels tegelijkertijd, die oplopend en van links naar rechts sorteert.
* het eerste getal geeft aan hoeveel duo's 3 maal altijd ploegspeler of tegenspeler waren, dit is ongewenst, dus die moet liefst 0 zijn, wat niet kan in het geval van 6 spelers.
* dan kijk je naar het volgende groepje van 3 getallen, die, zoals al vroeger gezegd, het aantal duo's weergeeft die 3, 2 of 1 keer samengespeeld hebben hetzij als ploegmaat, hetzij als tegenspeler. Zoals je kan zien zijn die eersten allen gelijk.
* de volgende groep van 3 getallen is het aantal keer dat een duo als tegenspelers 3, 2 of 1 keer voorgekomen zijn.
In dit geval zijn de 1e 2 rijen ook gelijk , nl. 0, 6 en 24 duo's speelden 3, 2 keer of 1 keer tegen elkaar.
* zelfde redenering voor de laatste groep van 3 spelers die het aantal keer telt die duo's als ploegmaat samen speelden.
In de 1e rij waren er 4 duo's die 2 maal samen speelden, in de 2e rij waren dat er 5, dus de eerste is "optimaler" en staat dus bovenaan.
Op deze manier probeer ik een gewicht aan een oplossing te geven, gelijklopend aan wat je probeert te zeggen met tiebreakers, wel dan heb ik er daar 10 van.

Eens je zo ver bent, dat je die voorbereiding (éénmalig) gedaan hebt, dan ben je vertrokken voor de rest.
In "wedstrijdblad" vul je links je namen en de cel ernaast laat je leeg of je vult er iets in, als de speler meedoet.
Je krijgt direct er naast een spelschema met 3-5 matchen al naargelang het aantal spelers met hun namen.

Het hinderlijke aan een vaste lijst met namen is dat die dan ook kwasi vast terugkeren in dat spelschema.
Als je een vinkje zit in "namen willekeurig weergeven", dan worden de namen vooraf even willekeurig door elkaar gehaspeld.
Dus moest je een paar keer dat vinkje aan en uit zetten, dan ga je bij "aan" steeds een ander spelschema krijgen.

In kolommen L:O krijg je die duo's netjes uitgesplitst en opgeteld zodat je mijn redenering beter zou kunnen begrijpen.

Ik hoop dat dit een goeie vertaling is voor je tiebreakers.
 

Bijlagen

  • Aantekening 2020-09-14 181255.png
    Aantekening 2020-09-14 181255.png
    16,1 KB · Weergaven: 17
  • voetbalcompetitie.xlsb
    538,6 KB · Weergaven: 18
Laatst bewerkt:
Top, bedankt voor de uitleg ik snap hem! Ik heb gelukkig geen last meer van de compileerfout. Echter is de eerdere automatisering fout die ik had wel teruggekomen. In de bijlage staat welke melding die precies geeft en waar deze fout in de VBA zit. Daarnaast heb ik nog steeds een speler nummer 0 er in staan, dat lijkt me niet juist (zie bijlage).

Dit is wel echt een ontzettend goede oplossing, ik weet 99% zeker dat dit voor de uiteindelijk beste match-ups zal leiden. De interpretatie van de tiebreakers kan denk ik echter nog iets beter. Nu is dit simpelweg het herordenen van de duos die bij jouw bijlage in kolom AF en in het huidige bestand in kolom Y staat.

Huidig:
0 Tot: 02 21 12 | T: 00 06 24 | P: 00 04 16

Wens:
0 Tot: 02 21 12 | Sommatie 3x samen tegenstanders en medespelers: T00+P00 | Sommatie 2x samen tegenstanders en medespelers: T06 + P04 | Liever 3x tegenstander dan 3x medespeler dus: P00 - T00 (een zo laag mogelijk getal is goed, weet niet of negatieve getallen werken. Anders 100 + (P00 - T00) | Liever 2x tegenstander dan 2x medespeler P04 - T06 (een zo laag mogelijk getal is goed, weet niet of negatieve getallen werken. Anders 100 + (P04 - T06)

Als toevoeging op de laatste stap (echter staat deze informatie nog niet in de huidige duo's)
Voor de Tot: 02 geldt dat 2x medespeler 1x tegenstander beter is dan 2x tegenstander 1x medespeler. Aangezien deze 1x tegenstander eigenlijk 1x medespeler cancelt. Wat je dus overhoud is 1x medespeler in plaats van 2x medespeler. Dit is beter dan 1x tegenstander in plaats van 2x tegenstander. Aangezien we hebben vastgesteld dat je liever 2x tegenstander hebt dan 2x medespeler. Deze zal moeten worden toegevoegd als aspect van de laatste "wens" code P04 - T06. Dit nieuwe zal dan worden (P04 - 2x medespeler en 1x tegenstander) - (T06 - 2x tegenstander en 1x medespeler) (een zo laag mogelijk getal is goed, weet niet of negatieve getallen werken. Anders 100 + (P04 - 2x medespeler en 1x tegenstander) - (T06 - 2x tegenstander en 1x medespeler). Mocht dit worden toegevoegd dan is er denk ik geen enkele manier denkbaar dat de sortering beter verloopt, echter weet ik niet hoe haalbaar dit is.

De 1 kan eigenlijk worden genegeerd omdat dit simpelweg de rest is.

In dit voorbeeld is de derde optie in de lijst (0 Tot: 02 21 12 | T: 00 07 22 | P: 00 02 20) wel op de hoogste positie. Dit lijkt me de beste optie aangezien hier er in totaal 9 duo's zijn bij de andere zijn dit er 10+. (Dit is afgezien van de toevoeging op de laatste stap aangezien ik hier geen inzicht in heb).
 

Bijlagen

  • Automatiseringsfout.PNG
    Automatiseringsfout.PNG
    5,3 KB · Weergaven: 18
  • Automatiseringsfout in de VBA.PNG
    Automatiseringsfout in de VBA.PNG
    36,4 KB · Weergaven: 20
  • Speler 0.PNG
    Speler 0.PNG
    6,9 KB · Weergaven: 12
Laatst bewerkt:
Straks krijg je als grootste kritiek, in het geval van 5 matchen en iemand moet er maar 2 spelen en die zijn toevallig de 1e en de laatste, dat zoiets toch niet kan.
Zoiets zal veel zwaarder doorwegen dan het fine-tunen waar we nu mee bezig zijn !

3 maal op het veld staan, hetzij altijd als ploegmaat, hetzij altijd als tegenspeler/tegenspeelster komt alleen voor in het geval van 6 spelers en is onvermijdelijk.
In alle andere gevallen is die gemakkelijk te vermijden.

Insteek is dus alle duo's zo weinig mogelijk keer samen op het veld te zetten en als dat dan toch gebeurd, zoveel mogelijk als tegenspeler.
Gevoelsmatig denk ik dat met een heel eenvoudige ingreep, de 2e en de 3e groep van 3 getallen van plaats verwisselen. Dat probeer ik vanavond.

Dan die foutmelding, ik vermoed dat ik je zal moeten uitleggen hoe je extra verwijzingen zal moeten aanmaken/aanvinken binnen VBA en daarna die gesorteerde lijst via early binding maken.
Dat lijkt, de eerste keer dat je zoiets doet, nogal complex en als je later toch nooit nog iets in VBA doet, nogal zwaar op de hand.
Zie https://excelmacromastery.com/vba-arraylist/comment-page-1/#Declare_and_Create_the_VBA_ArrayList (als engels geen probleem is en kijk vanaf "Update 12-Nov-2019: Intellisense doesn’t currently work for the ArrayList.")

Ivm. speler 00, dat is kwestie van programmeergemak, ik ga hier herhaaldelijk binnen de macro filteren en dan krijg je een array (soort verzameling) waarvan de eerste, het startnummer 0 is. Dus is het een vorm van gemakzucht om met speler 00 te beginnen ipv 01. Zolang je weet dat bij 8 spelers het intern 00, 01, 02, ..., 07 is en dat later voor jouw gemak naar echte namen vertaald wordt als je in je tabel daar in de 2e kolom iets invult.
 
Laatst bewerkt:
"Dan die foutmelding, ik vermoed dat ik je zal moeten uitleggen hoe je extra verwijzingen zal moeten aanmaken/aanvinken binnen VBA en daarna die gesorteerde lijst via early binding maken.
Dat lijkt, de eerste keer dat je zoiets doet, nogal complex en als je later toch nooit nog iets in VBA doet, nogal zwaar op de hand.
Zie https://excelmacromastery.com/vba-ar..._VBA_ArrayList (als engels geen probleem is en kijk vanaf "Update 12-Nov-2019: Intellisense doesn’t currently work for the ArrayList.")"

Super bedankt, ik heb het kunnen oplossen! :)

Ivm. speler 00, dat is kwestie van programmeergemak, ik ga hier herhaaldelijk binnen de macro filteren en dan krijg je een array (soort verzameling) waarvan de eerste, het startnummer 0 is. Dus is het een vorm van gemakzucht om met speler 00 te beginnen ipv 01. Zolang je weet dat bij 8 spelers het intern 00, 01, 02, ..., 07 is en dat later voor jouw gemak naar echte namen vertaald wordt als je in je tabel daar in de 2e kolom iets invult.

Ach tuurlijk, ik had moeten zien dat het laatste nummer er niet was.

"Insteek is dus alle duo's zo weinig mogelijk keer samen op het veld te zetten en als dat dan toch gebeurd, zoveel mogelijk als tegenspeler.
Gevoelsmatig denk ik dat met een heel eenvoudige ingreep, de 2e en de 3e groep van 3 getallen van plaats verwisselen. Dat probeer ik vanavond."

Maar dan heb je toch dat 2x duo's als medespeler en 8x duo's als tegenspeler hoger op de lijst komt te staan dan 3x duo's medespeler en 3x duo's tegenspeler? Als ik een lijst ernaast maak zoals ik in mijn vorige reactie had aangegeven. Zou jij dan ervoor kunnen zorgen dat deze wordt gesorteerd zoals deze nu bij de duo's wordt gesorteerd? Trouwens, het zoeken naar de beste oplossing werkt echt ontzettend goed, erg indrukwekkend. Bedankt!
 
zoals hoger gezegd, gewoon eventjes de ploegmaat en de tegenspeler van positie verwisseld in de sorteersleutel en eventjes alles 50.000 keer laten herrekenen.
Dan kom je tot een beste/goeie oplossing zoals in bijlage. By the way, het is Wall of Fame ipv. Hall of Fame, verspreking door mezelf.

Ik heb nu 12 spelers op actief gezet en zoals je kan zien in de kolommen L:O, alles ziet er netjes uit, er zijn 30 duo's ploegmaat, geen enkel duo komt een 2e keer terug als ploegmaat.
Verder zijn er als tegenspeler 35 duo's 1 keer en 5 duo's een 2e keer.
Op die manier werden er in totaal 57 verschillende duo's gevormd, waarvan er 39 duo's 1 keer en 18 duo's een 2e keer .
Die 18, bon, 5 van 2 keer tegenspeler en logischerwijs dus nog 13 die ook al eens ploegmaats waren.
Perfecte verdeling al zeg ik het zelf. 6 spelers doen 3 matchen, de anderen slechts 2 matchen.

Gooi er 1 of 2 spelers uit zodat je er 10-11 overhoudt. Ook hier 30 unieke duo's die slechts 1 keer samenspelen en de rest ook goed verdeeld.

Met 9 wordt het krapper, toch al 1 duo die 2 keer opkomt als ploegmaat, duo's-tegenspelers al met 8 voor een 2e keer.
Er zijn toch al 3 duo's die in alle 3 de matchen op het veld staan, maar dan enkel als 2*tegenstander en 1*ploegmaat, niet omgekeerd.

Met 8 en met 7 wordt het steeds moeilijker, het aantal keer 3 (rode cellen) loopt op naar 6, maar steeds als 2*T+1*P. Dus goed.

En dan het hopeloos geval 6 : daar heb ik inderdaad 6 duo's die 2*P+1*M (oranje cellen) zijn en 3 duo's die 3*P (rode cellen) zijn. Het is zo ...

Als je nu op die knop "Namen volgens Wall of Fame" drukt, dan krijg je steeds een spelschema met de namen op een andere manier door elkaar gehaspeld.

Aangezien je VBA niet aan de praat krijgt, leek het me verstandig zijn om de kolommen R2:Y8 te blokkeren en dan het werkblad te beveiligen (zonder paswoord). Dan kan je met die gegevens geen domme dingen meer doen.
 

Bijlagen

  • voetbalcompetitie.xlsb
    732,4 KB · Weergaven: 16
Laatst bewerkt:
Zie nu pas dat je ook al opnieuw gereageerd hebt. Als ik goed begrijp, werken de macros nu correct (nadat je de beveiliging van het werkblad er terug afgegooid hebt) ?
 
Ik heb NET. Framework 3.5 "toegevoegd" en vervolgens deed hij het gewoon weer. Ik moet eerlijk zeggen, dat ik ook zelf verrast was.

Terugkomend op mijn vorige reactie: "Als ik een lijst ernaast maak zoals ik in mijn vorige reactie had aangegeven. Zou jij dan ervoor kunnen zorgen dat deze wordt gesorteerd zoals deze nu bij de duo's wordt gesorteerd?" Is dit iets wat je zou kunnen? Dan kan ik daarmee aan de slag.

Nu ik het nieuwe bestand zie lijkt me dit hierboven niet nodig is. Ik zou natuurlijk in principe hem een uur kunnen laten draaien op één spelersaantal en dan in de lijst kunnen kijken of daar wellicht nog betere opties in staan. Nu werkt alleen het "zoeken beste oplossing voor één spelersaantal" niet. Deze werkt nog wel in het oude bestand waarbij de tegenstander voor de medespelers staan. Zou je hier nog even naar kunnen kijken?
 
Laatst bewerkt:
de knop functioneerde niet meer. Die er gedelete en een nieuwe er in gezet.

Dat alles nu werkt met die verwijzing aan te vinken is te gek, want dan moest ik die gesorteerde lijst via early binding ipv late binding (zie dat artikel) aanmaken, dat was nog niet gebeurd en toch werkt het al ???
 

Bijlagen

  • voetbalcompetitie (2).xlsb
    732,2 KB · Weergaven: 18
Ik heb geen idee waarom het nu wel werkt, maar het werkt. Ik ga ze nu laten draaien, ben benieuwd!
 
Heeft het nog zin om hem meerdere keren te laten lopen? Heb de 6, 8 en 10 spelers nu allen voor maximale tijd laten lopen. Stel ik doe hem nu opnieuw wordt deze dan overgeschreven? Of behoud hij de beste mogelijkheid.
 
Je kan en mag het maximaal aantal loop en/of de maximale tijd altijd aanpassen, geen probleem.
En inderdaad, je kan die macro nog tig keer laten lopen, er wordt op het einde vergeleken of het gevonden resultaat beter is dan de vorige "beste oplossing" en indien zo, dan wordt die overschreven, zo niet prullenmand.
Dus ik zou zeggen, als je de computer eens een 1/2 dag niet nodig hebt, zet dan op 100.000 loops en 3600 sec en kijk zoveel tijd later of je een msgbox krijgt met de aangepaste spelersaantallen, vermoedelijk niet dus.
Heb je de statusbalk beneden, onder de tabs van je werkbladen gezien, waarop je het verloop van de macro kan volgen ? Er gebeurt niets op het scherm, je zou anders kunnen denken, dat de macro blijft hangen.
 
Super, had al zo'n vermoeden maar better safe then sorry. Ik ga hem inderdaad maar een aantal keer laten lopen. Zaterdag begint de eerste week van het toernooi al, dus zal vandaag gebruiken om mogelijk tot nog betere combinaties te komen. De statusbalk heb ik gezien, maar bedankt voor je attentheid! Ik verwacht dat ik verder geen vragen meer tegenkom. Ontzettend bedankt, voor alle moeite die je hierin hebt gestopt. Het voelt toch een beetje oneerbiedig om zo weg te gaan. Maar ik zal in ieder geval op het forum blijven rondhangen om vragen van anderen te beantwoorden "to pay it forward". Dus wellicht komen we elkaar nog wel een keer tegen, fijne avond!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan