Programming Contest Nieuwe Stijl: Contest 3 *uitslagen!* Vorige deel Overzicht Volgende deel Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1 ... 8 ... 11 Laatste
Acties:
  • 6.509 views sinds 30-01-2008

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

output op scherm vreet tijd maar zoveel nu ook niet
tenzij hij alles output ofzo :)
de officiele testset neemt hier 15ms in beslag inlezen+solvefirstcome+output (zelfs nog debug mode) :*)
niet dat 't van belang is op 30 minuten :P

[ Voor 98% gewijzigd door ? ? op 05-06-2007 11:50 ]


Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
KoW schreef op dinsdag 05 juni 2007 @ 11:30:
[...]

Huh, welk algoritme gebruik jij dan voor "het meten, registreren en weergeven van de tijd" dat je daar 20 ms aan kwijt bent :?
regedit.exe openen vanuit je proggie, goede key opvragen waarin staat hoelang windows al draait. Screenshot maken, deze analyseren aan de hand van OCR, tijd eruitfilteren en het verschil uitrekenen met de vorige :+

Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
Marcks schreef op maandag 04 juni 2007 @ 22:45:
Mijn oude programma gaat helemaal de deur uit. Hij was te langzaam, haalde te lage score's en er kon naar mijn weten niet veel meer aan verbeterd worden. Ondanks mijn eerdere kritiek op het idee van _wm_ om een boom van indelingen te gebruiken, ga ik toch proberen dit te implementeren. Daarvoor eerst eens langs de electronicazaak om nieuwe geheugenkaartjes in te slaan. ;)

Ik begin met een eenvoudige startindeling. Ik weet nog niet hoe lang ik deze door ga optimaliseren (hoge en lage score's hebben beide hun voordelen), maar soit. Daarna ga ik vanuit die indeling zoveel mogelijk nieuwe indelingen (takken) maken, die de 'oude' indeling als parent krijgen. Als er geen nieuwe takken meer bijgemaakt kunnen worden, wordt één van de bestaande takken gevolgd (de hoogst scorende), en begint het verhaaltje overnieuw. Is een tak niet meer te optimaliseren, dan wordt deze gesloten, en ga ik terug naar de parent van de gesloten tak. Heeft ook deze tak geen open optimalisaties meer om te volgen, dan wordt ook deze gesloten, en gaan we terug naar de parent, enzovoorts. Flowchartje.

In theorie kan hiermee waarschijnlijk de perfecte oplossing gevonden worden, maar ik zal een afweging moeten maken tussen snelheid en zoekdiepte. Enfin, het idee is uitgewerkt, en ik kan veel routine's uit mijn oude programma kopiëren, dus deo volente heb ik het morgen werkzaam.

Post scriptum:
I'm gonna kick some ass and chew bubblegum, and guess what... >:)


edit: Laat ik het linkje even goed neerzetten voor mijn lieve, geïnteresseerde medeforummers. ;)
goeie flowchart! Alleen vroeg ik me nog 1 dingetje af:
als je geen open takken meer hebt, maar wél bleek dat alle takken die je gehad hebt een hogere score opleverden dan de parent, is het dan niet verstandiger om gewoon nóg een tak erbij te maken ipv terug te keren naar de parent?
Dat is al helemaal het geval als er helemaal geen takken meer over zijn (en dus het programma beëindigd zou moeten worden volgens jouw flowchart)... Dan zou ik, als er nog tijd is, gewoon de hoogste 5 scores die behaald zijn weer als basis gebruiken voor nieuwe generaties...

ik ga zelf ook maar eens kijken of ik zoiets kan implementeren... eerst binnen een paar seconden een sub-optimale score berekenen, en dan ter vergelijking de boomimplementatie er op loslaten totdat de tijd om is... ;)

Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
Ook onbekend schreef op maandag 04 juni 2007 @ 23:00:
@_WM_:

De resultaten met waarvan de hash begint met d9f1167dce26aa6c...... mogen wat mij betreft verwijderd worden. Deze waren van mij, maar waarschijnlijk had ik het vinkje niet altijd uitgevinkt.
oke, zijn weggemikt :)

dat vinkje geldt trouwens alleen maar voor of je je output.ini bekend wilt maken... je score voor die set blijft wel bewaard ;)

Acties:
  • 0 Henk 'm!

  • Marcks
  • Registratie: April 2007
  • Laatst online: 01:20
_wm_ schreef op dinsdag 05 juni 2007 @ 12:10:
[...]


goeie flowchart! Alleen vroeg ik me nog 1 dingetje af:
als je geen open takken meer hebt, maar wél bleek dat alle takken die je gehad hebt een hogere score opleverden dan de parent, is het dan niet verstandiger om gewoon nóg een tak erbij te maken ipv terug te keren naar de parent?
Dat is al helemaal het geval als er helemaal geen takken meer over zijn (en dus het programma beëindigd zou moeten worden volgens jouw flowchart)... Dan zou ik, als er nog tijd is, gewoon de hoogste 5 scores die behaald zijn weer als basis gebruiken voor nieuwe generaties...
Als mijn programma na vijf minuten klaar zou zijn, zou ik zeker zoiets moeten gebruiken. Ik weet alleen niet of het echt veel op zal leveren wanneer er nog andere takken over zijn. In principe maakt mijn programma 'alle' takken aan die aanvankelijk rendabel lijken. Deze hebben dus sowieso al een hogere score dan hun parent, en daarom begin waarschijnlijk ook met een niet-geoptimaliseerde startindeling. Pas als een tak 'doodloopt', wordt deze gesloten. Nu kan ik, als alle takken vanuit een punt gesloten zijn, een zwaarder (en dus langzamer) algoritme gebruiken om toch nog nieuwe, rendabele takken te vinden, maar misschien is dat gewoon tijdverspilling omdat er nog mogelijkheden genoeg zijn als ik 'even' terugspring naar de parent.

Overigens ben ik net begonnen aan de implementatie, en ik heb nu al weer een oprechte hekel aan mijn programmeeromgeving. 'Out of memory' is de grap ditmaal wanneer ik probeer de officiële testset in te lezen. Kon ik mijn progamma vroeger nog met Shift+F5 draaien, nu moet ik 8 keer klikken om een executable te produceren. Dat werkt verdomde lastig.
:(

Ik veronschuldig mij bij voorbaat voor het bovenstaande.


Acties:
  • 0 Henk 'm!

  • ArtyShock
  • Registratie: Juli 2002
  • Laatst online: 05-09 13:45
KoW schreef op dinsdag 05 juni 2007 @ 11:30:
Huh, welk algoritme gebruik jij dan voor "het meten, registreren en weergeven van de tijd" dat je daar 20 ms aan kwijt bent :?
Wat misschien nog wel interessanter is: Hoe heeft 'ie gemeten dat het meten van tijd 20 ms heeft geduurd? :P

Acties:
  • 0 Henk 'm!

  • liquid_ice
  • Registratie: Februari 2001
  • Laatst online: 08-09 14:43
@ Arty_Shock: Ik doe de tijd meten na het inlezen en weergeven.
Na het valideren en weergeven.
Na het initializeren van het algoritme en weergeven.
Na het algortime (is nog een lege functie) en weergeven
Na het wegschrijven en weergeven (ook lege functie) en dat was zo'n 60 ms bij elkaar.
Toen alleen de tijd meting gestart en op het eind gemeten en weergegeven en het was zo'n 20 ms sneller...

@_WM_: Jou manier is misschien ook wel een goed idee, eens ff doen dan:P
nee, ik gebruik
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
            // start time mesurement
            DateTime startTime1 = DateTime.Now;

            //Read values from INI
            ReadFiles(".\\deelnemers.ini", ".\\meeting.ini");
            DateTime stopTime1 = DateTime.Now;
            TimeSpan duration1 = stopTime1 - startTime1;                  
            Console.WriteLine("Reading input stopped at {0} milliseconds.", duration1.TotalMilliseconds);
            
            // validate input file
            validateInput();
            DateTime stopTime2 = DateTime.Now;
            TimeSpan duration2 = stopTime2 - startTime1; 
            Console.WriteLine("Validate input stopped at {0} milliseconds.", duration2.TotalMilliseconds);

            // Initialization algortime
            algoritme.initialization(ref members, ref meeting);
            DateTime stopTime3 = DateTime.Now;
            TimeSpan duration3 = stopTime3 - startTime1;
            Console.WriteLine("Initialize algoritme stopped at {0} milliseconds.", duration3.TotalMilliseconds);

            // start placing of people
            algoritme.place(ref houses);
            DateTime stopTime4 = DateTime.Now;
            TimeSpan duration4 = stopTime4 - startTime1;
            Console.WriteLine("Placement algoritme stopped at {0} milliseconds.", duration4.TotalMilliseconds);

            // start writing output file
            algoritme.place(ref houses);
            DateTime stopTime5 = DateTime.Now;
            TimeSpan duration5 = stopTime5 - startTime1;
            Console.WriteLine("Total program: {0} milliseconds.", duration5.TotalMilliseconds);

Klus page: http://klusthuis.blogspot.com


Acties:
  • 0 Henk 'm!

  • Darkwings
  • Registratie: Mei 2007
  • Laatst online: 15:35
liquid_ice schreef op dinsdag 05 juni 2007 @ 16:42:
@ Arty_Shock: Ik doe de tijd meten na het inlezen en weergeven.
Na het valideren en weergeven.
Na het initializeren van het algoritme en weergeven.
Na het algortime (is nog een lege functie) en weergeven
Na het wegschrijven en weergeven (ook lege functie) en dat was zo'n 60 ms bij elkaar.
Toen alleen de tijd meting gestart en op het eind gemeten en weergegeven en het was zo'n 20 ms sneller...

@_WM_: Jou manier is misschien ook wel een goed idee, eens ff doen dan:P
nee, ik gebruik
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
            // start time mesurement
            DateTime startTime1 = DateTime.Now;

            //Read values from INI
            ReadFiles(".\\deelnemers.ini", ".\\meeting.ini");
            DateTime stopTime1 = DateTime.Now;
            TimeSpan duration1 = stopTime1 - startTime1;                  
            Console.WriteLine("Reading input stopped at {0} milliseconds.", duration1.TotalMilliseconds);
            
            // validate input file
            validateInput();
            DateTime stopTime2 = DateTime.Now;
            TimeSpan duration2 = stopTime2 - startTime1; 
            Console.WriteLine("Validate input stopped at {0} milliseconds.", duration2.TotalMilliseconds);

            // Initialization algortime
            algoritme.initialization(ref members, ref meeting);
            DateTime stopTime3 = DateTime.Now;
            TimeSpan duration3 = stopTime3 - startTime1;
            Console.WriteLine("Initialize algoritme stopped at {0} milliseconds.", duration3.TotalMilliseconds);

            // start placing of people
            algoritme.place(ref houses);
            DateTime stopTime4 = DateTime.Now;
            TimeSpan duration4 = stopTime4 - startTime1;
            Console.WriteLine("Placement algoritme stopped at {0} milliseconds.", duration4.TotalMilliseconds);

            // start writing output file
            algoritme.place(ref houses);
            DateTime stopTime5 = DateTime.Now;
            TimeSpan duration5 = stopTime5 - startTime1;
            Console.WriteLine("Total program: {0} milliseconds.", duration5.TotalMilliseconds);
Je gebruikt ook 'n DateTime om een prog wat maximaal een half uur mag runnen te timen, lijkt me nogal over-the-top persoonlijk.

Moet erbij zeggen dat ik geen idee heb wat voor taaltje dit is, maar het kan vast eenvoudiger ;)

Acties:
  • 0 Henk 'm!

  • liquid_ice
  • Registratie: Februari 2001
  • Laatst online: 08-09 14:43
Sorry, het is C#, ik werkt in visual studio 2005.
Dit had ik gevonden op internet...

Klus page: http://klusthuis.blogspot.com


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

ik zou de StopWatch gebruiken die standaard in .NET zit?
ik gebruik zelf de API gettickcount() met een eigen klasse die wat uitgebreider is dan de stopwatch

Acties:
  • 0 Henk 'm!

  • liquid_ice
  • Registratie: Februari 2001
  • Laatst online: 08-09 14:43
zal dat eens ombouwen.
bespaart zeker wel weer paar ms

Klus page: http://klusthuis.blogspot.com


Acties:
  • 0 Henk 'm!

  • Marcks
  • Registratie: April 2007
  • Laatst online: 01:20
Zojuist mijn eerste legale output geproduceerd met het boomprincipe. Tijdens het programmeren ondervond ik echter dat mijn hele parent-child-structuur nogal overkill was. Ik ga nu simpelweg ineens springen naar een andere indeling met de hoogste score, zonder takken terug te volgen naar parents enzovoorts. Voor geïnteresseerden en/of leute die hetzelfde idee willen toepassen, zie hier een nieuwe flowchart.

Na een paar minuten en vijf 'generaties' zit ik al over de 2000 takken, dus die kan ik nooit allemaal volgen. Ik moet dus nog even iets bedenken dat alleen de rendabele takken eruit filtert. Verder heb ik wel (mijns inziens) een geniale manier gevonden om tot 6000 takken op te slaan in minder dan een halve MB aan geheugen, maar daar zal ik jullie niet mee lastig vallen... :)

Ik veronschuldig mij bij voorbaat voor het bovenstaande.


Acties:
  • 0 Henk 'm!

Verwijderd

Sorry, maar in de eerste pagina van reacties heb ik mijn vraag niet gezien.. En het lijkt me gaaf om zoiets te kunnen programmeren.
Ik heb wel een vraag. De huisjes zijn voor 8 personen. Maar een invalidehuisje is niet verder gedefinieerd. Het lijkt me, dat er in eenzelfde huisje, maar dan met invaliden inrichting, minder mensen zullen passen (gezien alle invalide aanpassingen aan zo'n huisje) dan in een huisje voor validen. Moet hier ook nog rekening mee worden gehouden? (bijv. max. 6 invaliden in een huisje)

Acties:
  • 0 Henk 'm!

  • lvh
  • Registratie: Juli 2001
  • Laatst online: 02-11-2022

lvh

Verwijderd schreef op dinsdag 05 juni 2007 @ 17:29:
Sorry, maar in de eerste pagina van reacties heb ik mijn vraag niet gezien.. En het lijkt me gaaf om zoiets te kunnen programmeren.
Ik heb wel een vraag. De huisjes zijn voor 8 personen. Maar een invalidehuisje is niet verder gedefinieerd. Het lijkt me, dat er in eenzelfde huisje, maar dan met invaliden inrichting, minder mensen zullen passen (gezien alle invalide aanpassingen aan zo'n huisje) dan in een huisje voor validen. Moet hier ook nog rekening mee worden gehouden? (bijv. max. 6 invaliden in een huisje)
Nee. In alle huisjes passen evenveel mensen, maar je hebt er maar een beperkt aantal waar je invaliden in geduwd krijgt.

Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
Marcks schreef op dinsdag 05 juni 2007 @ 17:15:
Zojuist mijn eerste legale output geproduceerd met het boomprincipe. Tijdens het programmeren ondervond ik echter dat mijn hele parent-child-structuur nogal overkill was. Ik ga nu simpelweg ineens springen naar een andere indeling met de hoogste score, zonder takken terug te volgen naar parents enzovoorts. Voor geïnteresseerden en/of leute die hetzelfde idee willen toepassen, zie hier een nieuwe flowchart.

Na een paar minuten en vijf 'generaties' zit ik al over de 2000 takken, dus die kan ik nooit allemaal volgen. Ik moet dus nog even iets bedenken dat alleen de rendabele takken eruit filtert. Verder heb ik wel (mijns inziens) een geniale manier gevonden om tot 6000 takken op te slaan in minder dan een halve MB aan geheugen, maar daar zal ik jullie niet mee lastig vallen... :)
geniale oplossingen vind ik het mooist aan deze competitie, dus ik ben toch nog steeds zeer benieuwd, als het niet te veel werk is ;)
En 'Shift+F5', dat deed even de nostalgie opwellen :)

edit: en ik vroeg me nog even af hoe je bepaalt of een indeling voor optimalisatie geschikt is...(?)

[ Voor 4% gewijzigd door _wm_ op 05-06-2007 17:44 ]


Acties:
  • 0 Henk 'm!

  • Marcks
  • Registratie: April 2007
  • Laatst online: 01:20
_wm_ schreef op dinsdag 05 juni 2007 @ 17:43:
[...]

geniale oplossingen vind ik het mooist aan deze competitie, dus ik ben toch nog steeds zeer benieuwd, als het niet te veel werk is ;)
En 'Shift+F5', dat deed even de nostalgie opwellen :)

edit: en ik vroeg me nog even af hoe je bepaalt of een indeling voor optimalisatie geschikt is...(?)
Gewoon proberen te optimaliseren en kijken of er een hogere score uit komt. :P

Ik veronschuldig mij bij voorbaat voor het bovenstaande.


Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
Marcks schreef op dinsdag 05 juni 2007 @ 18:00:
[...]

Gewoon proberen te optimaliseren en kijken of er een hogere score uit komt. :P
Dus eerst ga je kijken of het geoptimaliseerd kan worden (door te kijken of er een hogere score uitkomt), en als dat kan, ga je het pas optimaliseren :P
(even zeuren op je schema ;) )

Nee, ik snap het denk ik wel... hoe ga je dat kijken of het geoptimaliseerd kan worden? gewoon 10 variaties proberen oid? En als ie dan niks gevonden heeft, verdergaan met een andere?

Acties:
  • 0 Henk 'm!

  • m277755
  • Registratie: Februari 2004
  • Laatst online: 24-01-2022

m277755

leest meer dan hij typt

Verwijderd schreef op dinsdag 05 juni 2007 @ 17:29:
Het lijkt me, dat er in eenzelfde huisje, maar dan met invaliden inrichting, minder mensen zullen passen (gezien alle invalide aanpassingen aan zo'n huisje) dan in een huisje voor validen. Moet hier ook nog rekening mee worden gehouden? (bijv. max. 6 invaliden in een huisje)
Een invalidenhuisjes is gewoon groter dan een normaal huisje, daarom zijn er ook niet zoveel van ;)

Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

De validator geeft een fout:
code:
1
fout: er worden meer invalidenhuisjes (11) gebruikt dan er beschikbaar zijn (3).


met meeting.ini:
[meeting]
aantalhuisjes=20
aantalinvalidenhuisjes=3
personenperhuis=8

terwijl dit m'n output is
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
[huisje1]
kamer1=Confusion,Rosette
kamer2=mOrPhie,BalusC
kamer3=Wouke,Superdeboer
kamer4=BtM909,LuNaTiC

[huisje2]
kamer1=Gwenneth,Daedalus
kamer2=Stefke,Arthur
kamer3=sanfranjake,naftebakje
kamer4=DSmarty,HlpDsK

[huisje3]
kamer1=Aikeleer,whoami
kamer2=Yoeri,Jasper
kamer3=Turkish,cybersteef
kamer4=JAVA-Doctor,voodooless

[huisje4]
kamer1=Rataplan,Harm
kamer2=Floppus,Joror
kamer3=Xandrios,Hielko
kamer4=Crash,Grrrrrene

[huisje5]
kamer1=pasta,RM-rf
kamer2=Margje,Equator
kamer3=Longbeard,DeeD2k2
kamer4=RobIII,Terr

[huisje6]
kamer1=T.T.,zomertje
kamer2=W3ird_N3rd,botoo
kamer3=Iria,Creepy
kamer4=Thandor,Ropniko

[huisje7]
kamer1=Emmeline,leon1e
kamer2=Koffie,Martin Sturm
kamer3=Ralph Smeets,Canaria
kamer4=JvS,Floris

[huisje8]
kamer1=-NMe-,Dimitri R
kamer2=Hans,polaris
kamer3=xxfile,McVirusS
kamer4=Ghost,aperture

[huisje9]
kamer1=Oscar the Grouch,Kaj.
kamer2=Fuelke,Twynn
kamer3=dion_b,Renegade
kamer4=Spider.007,Daniel

[huisje10]
kamer1=Qwerty-273,Abbadon
kamer2=Atlas,Femme
kamer3=Apen-nootjes,rob_erwt
kamer4=crisp,GeniusDex

[huisje11]
kamer1=P_de_B,Zoefff
kamer2=Pim.,Fisico
kamer3=Steffie,dawuss
kamer4=Lustucru,Remy

[huisje12]
kamer1=Jan Laros,AcouSE
kamer2=Cookie,Ecteinascidin
kamer3=Sophia,TinuX
kamer4=Microkid,wilhelmstroker

[huisje13]
kamer1=D    robanir,chem
kamer2=dreeke,IlseIII
kamer3=zeef,Sprite_tm
kamer4=F_J_K,Michel

[huisje14]
kamer1=curry684,Robin
kamer2=.oisyn,Hahn
kamer3=SmartDoDo,woltjer
kamer4=alt-92,blaataaps

[huisje15]
kamer1=haribold,Kees
kamer2=JHS,Dido
kamer3=Eggy,XangadiX
kamer4=Mick,ACM

[huisje16]
kamer1=Janette,André
kamer2=Kheldar,YellowCube
kamer3=Wilke,Rukapul
kamer4=Inge Janse,Janoz

[huisje17]
kamer1=,Orion84
kamer2=dusty,p0m
kamer3=Juultje,Jimmy Pop
kamer4=Roelant,bjck

[invaliden1]
kamer1=Pascal Saul,Pollewob
kamer2=Wouter Tinus,moto-moi
kamer3=elevator,KeX
kamer4=Opi

[invaliden2]
kamer1=
kamer2=
kamer3=
kamer4=

[invaliden3]
kamer1=
kamer2=
kamer3=
kamer4=

[ Voor 197% gewijzigd door ? ? op 05-06-2007 20:17 ]


Acties:
  • 0 Henk 'm!

  • Marcks
  • Registratie: April 2007
  • Laatst online: 01:20
_wm_ schreef op dinsdag 05 juni 2007 @ 18:04:
[...]

Dus eerst ga je kijken of het geoptimaliseerd kan worden (door te kijken of er een hogere score uitkomt), en als dat kan, ga je het pas optimaliseren :P
(even zeuren op je schema ;) )

Nee, ik snap het denk ik wel... hoe ga je dat kijken of het geoptimaliseerd kan worden? gewoon 10 variaties proberen oid? En als ie dan niks gevonden heeft, verdergaan met een andere?
Ik probeer (b2-b)/2 variaties, waarbij b het aantal bedden is, en kijk per variatie of aan beide onderstaande voorwaarden voldaan wordt.
1) Valideer(...) = True
2) ScoreOud + Ondergrens < ScoreNieuw

Is dat het geval, dan wordt van die variatie een tak gemaakt, en zoek ik verder tot ik door alle variaties heen ben. Jammerlijk langzaam, maar kinderlijk eenvoudig. Voorlopig concentreer ik mij vooral even op het werkzaam zijn van het programma, want ik loop nog wel eens tegen wat foutmeldingen op. Out of stack space (28) is momenteel een heel vervelende, die ik al meerdere keren ben tegengekomen, maar tijdens het debuggen uiteraard niet kan reproduceren. :'(


@era.zer:
Haal de output eens door een andere validator. En vanwaar die komma in r98?


edit:
Oké, errors reproduceren is één ding, nu heb ik nog geen flauw idee waar het vandaan komt.

[ Voor 11% gewijzigd door Marcks op 05-06-2007 20:36 ]

Ik veronschuldig mij bij voorbaat voor het bovenstaande.


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

hmm dat komt omdat er een empty persoon in zat, maar error ivm aantal huisjes blijft nog steeds.
de andere validators zeggen dat er een persoon in de output zit die niet in de deelnemers.ini zit. (andr@é met raar teken). Maar er staat toch wel andré in mn output :( Zucht vandaag gaat 't precies niet vooruit

[ Voor 37% gewijzigd door ? ? op 05-06-2007 20:43 ]


Acties:
  • 0 Henk 'm!

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 12-09 20:53
Met dat rare teken, is dat mijn validator? (heb nog niet echt kunnen kijken naar codering e.d.). Zijn je output.ini en deelnemers.ini met dezelfde instellingen opgeslagen?

Bezoek eens een willekeurige pagina


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

ow ja
Afbeeldingslocatie: http://www.pix.fm/argh.png
André is niet echt André als ik 't in hex bekijk..
inlezen in ansi en saven in iets anders werkt natuurlijk niet :O
wel raar dat hij 't correct in notepad toont

[ Voor 66% gewijzigd door ? ? op 05-06-2007 20:54 ]


Acties:
  • 0 Henk 'm!

Verwijderd

shit :'( ik direct keihard coden in PHP, niet doorhebbende dat alles clientside moet draaien. Maar uiteraard logisch hehe. Was gelukkig nog niet verder gekomen dan de classen coden dus dat scheelt weer :) Nu maar overnieuw in Java.

Acties:
  • 0 Henk 'm!

  • Malthus
  • Registratie: April 2003
  • Laatst online: 23-04 15:30
era.zer schreef op dinsdag 05 juni 2007 @ 19:59:
De validator geeft een fout:
code:
1
fout: er worden meer invalidenhuisjes (11) gebruikt dan er beschikbaar zijn (3).
Hou er wel rekening mee dat een invalidenhuisje een invalidenhuisje is als er invaliden in zitten. Dus als er minimaal één invalide in een huisje zit, is het automatisch een invalidenhuisje. Welke naam er tussen de blokhaken geplaatst wordt maakt helemaal niets uit.

Acties:
  • 0 Henk 'm!

  • Marcks
  • Registratie: April 2007
  • Laatst online: 01:20
Verwijderd schreef op dinsdag 05 juni 2007 @ 21:50:
shit :'( ik direct keihard coden in PHP, niet doorhebbende dat alles clientside moet draaien. Maar uiteraard logisch hehe. Was gelukkig nog niet verder gekomen dan de classen coden dus dat scheelt weer :) Nu maar overnieuw in Java.
Da's geen probleem hoor. De jury-pc functioneert dan even als 'server'. Volgens mij is php een vrij veel gebruikte taal in deze contest.

Ik veronschuldig mij bij voorbaat voor het bovenstaande.


Acties:
  • 0 Henk 'm!

  • Malthus
  • Registratie: April 2003
  • Laatst online: 23-04 15:30
Darkwings schreef op dinsdag 05 juni 2007 @ 16:53:
Je gebruikt ook 'n DateTime om een prog wat maximaal een half uur mag runnen te timen, lijkt me nogal over-the-top persoonlijk.
Ik denk juist dat liquid_ice voor de prijs voor de 'beste defensive code' gaat. :)

Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
era.zer schreef op dinsdag 05 juni 2007 @ 19:59:
De validator geeft een fout

...
heb een speciaal analyse script voor je geschreven ;)

Je gebruikt écht 11 invalidenhuisjes... check hier:
http://willem-mulder.nl/got/contest/wm_analyse.php

sowieso al deze 4 huisjes (dat zijn er dus meer dan 3 :P )
huisje 2 - kamer 2 - p2
huisje 3 - kamer 1 - p1
huisje 4 - kamer 4 - p2
huisje 6 - kamer 1 - p2

edit: een huisje wordt een invalidenhuisje als er een invalide inzit, níet als je het een of andere 'invalidennaam' geeft ;)
edit2: Malthus was me voor... d:)b

[ Voor 73% gewijzigd door _wm_ op 05-06-2007 22:11 ]


Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
Marcks schreef op dinsdag 05 juni 2007 @ 21:53:
[...]

Da's geen probleem hoor. De jury-pc functioneert dan even als 'server'. Volgens mij is php een vrij veel gebruikte taal in deze contest.
ah oui, moi pour example ;) PHP voor de winst!! :+

Acties:
  • 0 Henk 'm!

Verwijderd

Marcks schreef op dinsdag 05 juni 2007 @ 21:53:

Da's geen probleem hoor. De jury-pc functioneert dan even als 'server'. Volgens mij is php een vrij veel gebruikte taal in deze contest.
Dat is nog geen reden om een webserver te installeren en te configureren? In PHP kun je prima CLI scripts schrijven. Er moeten bestanden in dezelfde directory worden aangemaakt. Hoe wil je dat de webserver dat doet? Eerst rottig geconfigureerd worden?

Acties:
  • 0 Henk 'm!

  • liquid_ice
  • Registratie: Februari 2001
  • Laatst online: 08-09 14:43
Malthus schreef op dinsdag 05 juni 2007 @ 22:01:
[...]


Ik denk juist dat liquid_ice voor de prijs voor de 'beste defensive code' gaat. :)
M'n prog zit nog onder de 100 ms.
Geen reden dus om op dit moment om te denken dat ik OOIT dat half uur nodig zal hebben...
Maar optimalisatie komt nog.
eerst werkende code, dan defensieve of snelle...

Klus page: http://klusthuis.blogspot.com


Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
Verwijderd schreef op dinsdag 05 juni 2007 @ 22:19:
[...]

Dat is nog geen reden om een webserver te installeren en te configureren? In PHP kun je prima CLI scripts schrijven. Er moeten bestanden in dezelfde directory worden aangemaakt. Hoe wil je dat de webserver dat doet? Eerst rottig geconfigureerd worden?
webserver is al geïnstalleerd lijkt me... Is vrij standaard... gewoon XAMPP installatie (PHP, Perl, Python)?
En bestanden in dezelfde map schrijven kan altijd als je scripts lokaal draait. Even het aanroepen van file_put_contents("output.ini",$resultaat); en klaar is kees ;)

Acties:
  • 0 Henk 'm!

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 12-09 20:53
Als je PHP wil gebruiken, ga er dan maar vanuit dat er geen MySQL en geen internetverbing aanwezig is. Sowieso kan dat niet; je tool moet zonder verdere interactie kunnen draaien als ik erop dubbelklik of hem start vanaf de commandline. Waar wil je dan de gegevens van de databaseserver vandaan halen?
PHP wordt gewoon vanaf de command-line uitgevoerd. (dus niet via een paginabezoek).

Bezoek eens een willekeurige pagina


Acties:
  • 0 Henk 'm!

Verwijderd

_wm_ schreef op dinsdag 05 juni 2007 @ 22:27:
[...]


webserver is al geïnstalleerd lijkt me... Is vrij standaard... gewoon XAMPP installatie (PHP, Perl, Python)?
En bestanden in dezelfde map schrijven kan altijd als je scripts lokaal draait. Even het aanroepen van file_put_contents("output.ini",$resultaat); en klaar is kees ;)
Ja, als je je scripts lokaal draait, niet via HTTP aanroepen dus. Dat vind ik wel echt onzin. Wie met PHP een scriptje kan schrijven dat een HTML pagina genereert, kan ook een scriptje schrijven dat een paar ini bestandjes wegschrijft. Moet dat dan meteen via een HTTP server? Lijkt mij onzin, en een vreemde aanname. En vooral een gebrek aan inzicht.

Acties:
  • 0 Henk 'm!

  • Darkwings
  • Registratie: Mei 2007
  • Laatst online: 15:35
Bijna klaar met m'n interne puntentelling, die nog klopt met die online validator ook *O*

Als dat af is kan ik eindelijk punten gaan scoren, zit nu op een miserable 18 punten ofzo. Maar goed, daar zit dan ook praktisch geen logica achter.

Acties:
  • 0 Henk 'm!

Verwijderd

Marcks schreef op dinsdag 05 juni 2007 @ 21:53:
[...]

Da's geen probleem hoor. De jury-pc functioneert dan even als 'server'. Volgens mij is php een vrij veel gebruikte taal in deze contest.
Mja ik was zwaar bezig mysql te gebruiken. Dacht mooi slim te zijn de ini file in te lezen in database te zetten. Kon ik daarna makkelijk zoeken etc. En sowieso gebruikte ik mijn eigen php-framework, en had geen zin die te poorten daarna allelei rare commandline dingen (ook geen zin om het uit te vinden) ;)

Ben nu al weer bijna net zover in java als ik in php was dus laat php maar hangen

Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
Verwijderd schreef op dinsdag 05 juni 2007 @ 22:37:
[...]

Ja, als je je scripts lokaal draait, niet via HTTP aanroepen dus. Dat vind ik wel echt onzin. Wie met PHP een scriptje kan schrijven dat een HTML pagina genereert, kan ook een scriptje schrijven dat een paar ini bestandjes wegschrijft. Moet dat dan meteen via een HTTP server? Lijkt mij onzin, en een vreemde aanname. En vooral een gebrek aan inzicht.
oh okee, je bedoelt dat het gewoon via de commandline moet ipv via een webserver...
Ik dacht dat je je afvroeg hoe je ooit een webserver geïnstalleerd kon krijgen ;)

Maar scripts worden denk ik inderdaad vanaf de commandline gedraaid, al snap ik niet waarom je via een webinterface draaien nou zo erg vindt... Kan je eventueel wat mooie HTML naar buiten spugen als je dat leuk vindt... niks mis mee toch?
En ook al zóu het dom zijn om het via een webinterface te doen, dan hoeft dat nog niet meteen 'gebrek aan inzicht' te zijn... :/ Iemand verbindt PHP met een webserver en internetpagina's ipv met een parser die gebruikt kán worden door bijv Apache. Maakt toch niks uit? Leg hem dan uit hoe het werkt, dat helpt meer dan zeggen dat het gebrek aan inzicht is ;)

zo, en nu weer aan het coden :)

Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
Verwijderd schreef op dinsdag 05 juni 2007 @ 22:45:
[...]

Mja ik was zwaar bezig mysql te gebruiken. Dacht mooi slim te zijn de ini file in te lezen in database te zetten. Kon ik daarna makkelijk zoeken etc. En sowieso gebruikte ik mijn eigen php-framework, en had geen zin die te poorten daarna allelei rare commandline dingen (ook geen zin om het uit te vinden) ;)

Ben nu al weer bijna net zover in java als ik in php was dus laat php maar hangen
commandline betekent gewoon dat het niet via een browser wordt gedraaid maar zeg maar via een soort van MSDOS venster... Je hoeft je script er niet voor te veranderen :)

php.exe verwerkt jouw PHP-tje en geeft dan de output terug aan diegene die aan php.exe 'gevraagd' had om dat script te verwerken.
Als je webserver dat vraagt, dan krijgt je webserver de resultaten terug. Als je via start > uitvoeren het doet, dan krijg je het in zo'n MSDOS venstertje terug...

MySQL is niet zo handig hoor voor zoiets als dit trouwens... SQL is alleen handig als je echt rare zoekopdrachten moet doen enzo. Als je, zoals hier bij de contest, alleen maar met simpele arrays werkt, is dat vele malen sneller dan helemaal 'extern' via SQL te werken.

Maar succes met je Java sowieso ;)

Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

_wm_ schreef op dinsdag 05 juni 2007 @ 22:06:
[...]een huisje wordt een invalidenhuisje als er een invalide inzit, níet als je het een of andere 'invalidennaam'
ah zo, dat is natuurlijk iets anders! komt ervan om niet alles goed te lezen.
dankjewel :)

Acties:
  • 0 Henk 'm!

Verwijderd

_wm_ schreef op dinsdag 05 juni 2007 @ 22:55:
[...]


commandline betekent gewoon dat het niet via een browser wordt gedraaid maar zeg maar via een soort van MSDOS venster... Je hoeft je script er niet voor te veranderen :)

php.exe verwerkt jouw PHP-tje en geeft dan de output terug aan diegene die aan php.exe 'gevraagd' had om dat script te verwerken.
Als je webserver dat vraagt, dan krijgt je webserver de resultaten terug. Als je via start > uitvoeren het doet, dan krijg je het in zo'n MSDOS venstertje terug...

MySQL is niet zo handig hoor voor zoiets als dit trouwens... SQL is alleen handig als je echt rare zoekopdrachten moet doen enzo. Als je, zoals hier bij de contest, alleen maar met simpele arrays werkt, is dat vele malen sneller dan helemaal 'extern' via SQL te werken.

Maar succes met je Java sowieso ;)
ah oki weer wat geleerd :)

Ik vond zelf wel lijp idee alle personen in een tabel te zetten. Dan is het heel makkelijk sorteerbaar enz. Verder niet over nagedacht wat sneller is, ik zou het al gaaf vinden als ik iets werkens heb. thx anyway

Acties:
  • 0 Henk 'm!

Verwijderd

Marcks schreef op dinsdag 05 juni 2007 @ 20:23:
[...]

Voorlopig concentreer ik mij vooral even op het werkzaam zijn van het programma, want ik loop nog wel eens tegen wat foutmeldingen op. Out of stack space (28) is momenteel een heel vervelende, die ik al meerdere keren ben tegengekomen, maar tijdens het debuggen uiteraard niet kan reproduceren. :'(
Iets teveel recursies gebruikt wsl. :)

Acties:
  • 0 Henk 'm!

  • ArtyShock
  • Registratie: Juli 2002
  • Laatst online: 05-09 13:45
Zo, mijn validator is ook af. Ik heb 'm steekproefsgewijs vergeleken met de uitkomsten van die van _wm_ en in alle gevallen kwamen de scores overeen. Aangezien ik slechts één command parameter gestuurde console applicatie maak, moet ik even denken of ik 'm wel publiekelijk maak. Hm. Misschien een validator-only build van maken...

NB. Ik zit inmiddels op 2000 regels code. Dat was ook de grootte van m'n vorige inzending en ik ben nu nog niet eens aan de kern van de oplossing begonnen. :')

Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

nog een vraagje, misschien is het wel al beantwoord:
zijn de invalidenhuisjes verplicht?
stel dat de puntentelling hoger is als je (wat) invaliden niet indeelt en de huisjes gebruikt om andere mensen tesamen te zetten, mag dat of is het aantal invalidenhuisjes set.

Acties:
  • 0 Henk 'm!

Verwijderd

era.zer schreef op woensdag 06 juni 2007 @ 10:53:
nog een vraagje, misschien is het wel al beantwoord:
zijn de invalidenhuisjes verplicht?
stel dat de puntentelling hoger is als je (wat) invaliden niet indeelt en de huisjes gebruikt om andere mensen tesamen te zetten, mag dat of is het aantal invalidenhuisjes set.
Je mag niet-invaliden gewoon in invalidenhuisjes stoppen, kost niks. Wat zou de reden dan kunnen zijn om die invalidenhuisjes "weg te laten"?

Acties:
  • 0 Henk 'm!

  • ArtyShock
  • Registratie: Juli 2002
  • Laatst online: 05-09 13:45
era.zer schreef op woensdag 06 juni 2007 @ 10:53:
nog een vraagje, misschien is het wel al beantwoord:
zijn de invalidenhuisjes verplicht?
stel dat de puntentelling hoger is als je (wat) invaliden niet indeelt en de huisjes gebruikt om andere mensen tesamen te zetten, mag dat of is het aantal invalidenhuisjes set.
De regel is heel simpel: Je mag invaliden niet over meer huisjes verdelen dan in de deelnemers.ini staat. Zie het maar zo: zodra een invalide in een huisje zit, is het opeens magischerwijs een invalidenhuisje geworden.

Toch blijft het vreemd om als voorkeur 'invalide' te hebben... :P

Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

"organisatie" en "invalide". Deze voorkeuren zijn met uitzondering van de laatste twee typen niet verplicht om op te volgen, maar het levert je bonuspunten op als je de voorkeuren van alle mensen in een huisje matcht.
verplicht te volgen -> dus mag je zoals cheatah zegt toch geen niet-invaliden tesamen zetten met invaliden?

Acties:
  • 0 Henk 'm!

Verwijderd

era.zer schreef op woensdag 06 juni 2007 @ 11:12:

verplicht te volgen -> dus mag je zoals cheatah zegt toch geen niet-invaliden tesamen zetten met invaliden?
Ik bedoel dat je volgens mij wél niet-invaliden en invaliden samen in één huisje mag stoppen. Je mag inderdaad geen organisatie en niet-organisatie in 1 huisje stoppen.

Acties:
  • 0 Henk 'm!

Verwijderd

era.zer schreef op woensdag 06 juni 2007 @ 10:53:
nog een vraagje, misschien is het wel al beantwoord:
zijn de invalidenhuisjes verplicht?
stel dat de puntentelling hoger is als je (wat) invaliden niet indeelt en de huisjes gebruikt om andere mensen tesamen te zetten, mag dat of is het aantal invalidenhuisjes set.
In de spelregels:
Wanneer je een invalide in een huisje wil plaatsen waar nog geen invaliden in zitten, dan wordt het aantal beschikbare invalidenhuisjes verminderd met één. Is het aantal invalidenhuisje op, dan zul je invaliden, ongeacht hun andere voorkeuren, bij elkaar moeten plaatsen.
Impliceert dit nou ook dat het mogelijk zou kunnen zijn dat er meer invaliden dan beschikbare invalidehuisjes zijn? Of is dit alleen maar bedoeld voor als je je zelf in de problemen hebt gewerkt dat je dan maar de invaliden bijelkaar moet proppen in een gewoon huisje?

Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

jah als de definitie van een invalidenhuisje is "als er een invalide in zit", hoe kun je wat hobsie aanhaalt nu gaan doen. Dan heeft die invalide gewoon pech en kan hij niet mee?

en over mijn eerste vraag:
stel dat ik alle invaliden niet indeel en de rest wel en mijn score hoger is dan als ik de invaliden wel indeel, is dat toegelaten? vandaar ;)

[ Voor 32% gewijzigd door ? ? op 06-06-2007 11:23 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op woensdag 06 juni 2007 @ 11:18:

In de spelregels:

Impliceert dit nou ook dat het mogelijk zou kunnen zijn dat er meer invaliden dan beschikbare invalidehuisjes zijn?
Dit kan altijd en valt mijns inziens ook onder het "defensief" programmeren. Misschien zijn er ook wel meer deelnemers dan huisjes. Of misschien hebben deelnemers allemaal geen partner of roomies. Misschien zijn er wel geen mensen zonder voorkeur.
Of is dit alleen maar bedoeld voor als je je zelf in de problemen hebt gewerkt dat je dan maar de invaliden bijelkaar moet proppen in een gewoon huisje?
Ik denk eerder dat het gewoon betekent dat je niet meer dan x invalidenhuisjes mag gebruiken, en anders is je resultaat ongeldig. Als je invaliden niet meer "voordelig" kwijt kunt, moet je misschien wel nietroomies bij elkaar in een huis stoppen, of misschien moet je enkele invaliden dan maar niet indelen. Punt is dat er niet meer invalidenhuisjes mogen zijn dan is aangegeven. Zitten er in meer dan zoveel huisjes invaliden, dan is het resultaat ongeldig.

Acties:
  • 0 Henk 'm!

Verwijderd

@Cheatah thx voor de verduidelijking :)
era.zer schreef op woensdag 06 juni 2007 @ 11:21:
en over mijn eerste vraag:
stel dat ik alle invaliden niet indeel en de rest wel en mijn score hoger is dan als ik de invaliden wel indeel, is dat toegelaten? vandaar ;)
Tuurlijk mag dat maar dat kost wel 10punten per niet ingedeeld persoon, daar kan je never de hoogste score mee halen dunkt me ;)

Acties:
  • 0 Henk 'm!

  • ArtyShock
  • Registratie: Juli 2002
  • Laatst online: 05-09 13:45
era.zer schreef op woensdag 06 juni 2007 @ 11:21:
jah als de definitie van een invalidenhuisje is "als er een invalide in zit", hoe kun je wat hobsie aanhaalt nu gaan doen. Dan heeft die invalide gewoon pech en kan hij niet mee?
De kunst van het interpreteren van de regels is ze zo abstract mogelijk opvatten en mocht dat nog enige onduidelijkheid opleveren; probeer ze te lezen in de sfeer van de probleemstelling.

Dus, de regel:
Is het aantal invalidenhuisje op, dan zul je invaliden, ongeacht hun andere voorkeuren, bij elkaar moeten plaatsen.
is (behoudens de schrijffouten :P ) bedoeld als: Ook al levert het een scoreverslechtering op als je noodgedwongen invaliden moet samenpakken in een huisje, je mag nooit meer huisjes claimen voor invaliden dan het opgegeven aantal.

Hieruit lees ik dan ook dat een opgave illegaal is als er meer mensen zijn met een 'invalide' voorkeur dan bedden voor invaliden.

Mocht ik compleet fout zitten dan zal ik waarschijnlijk terdege terechtgewezen worden. O-)

[ Voor 5% gewijzigd door ArtyShock op 06-06-2007 11:41 ]


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

over dat maximaal aantal huisjes bestaat geen twijfel
maar is er een minimaal?
en de hoogste score zonder wat invaliden kan perfect vermoed ik, tussen de biljoenen sets zullen er wel zo zijn

Acties:
  • 0 Henk 'm!

  • mnielsm
  • Registratie: September 2002
  • Laatst online: 19:57
Arty_Shock schreef op woensdag 06 juni 2007 @ 11:39:

Hieruit lees ik dan ook dat een opgave illegaal is als er meer mensen zijn met een 'invalide' voorkeur dan bedden voor invaliden.

Mocht ik compleet fout zitten dan zal ik waarschijnlijk terdege terechtgewezen worden. O-)
Ik denk dat dit zonder meer toegestaan is, je zult dan invalidemensen moeten weglaten.
Net zoals er meer deelnemers mogen/kunnen zijn als bedden. Ook dan zul je mensen moeten weglaten.

En ja dat is ook het probleem van deze contest...
- Je weet niet hoe groot de groep zal zijn
- Je weet niet wat voor n vreemde voorkeuren e.d. ze zullen hebben
- Je weet bijna wel zeker dat er wat vreemde dingen in zullen zitten...

Voor het eenvoudigste zoeken naar alle chinese webshops: www.chinapricefinder.com


Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
era.zer schreef op woensdag 06 juni 2007 @ 11:51:
over dat maximaal aantal huisjes bestaat geen twijfel
maar is er een minimaal?
en de hoogste score zonder wat invaliden kan perfect vermoed ik, tussen de biljoenen sets zullen er wel zo zijn
minimaal is er niet... je mag als je wilt alle invaliden niet plaatsen... Kost je alleen wel (10 * aantalnietgeplaatsteinvaliden) aan punten, en dat is heel veel ;)

Invaliden zijn echt niet zó vervelend dat ze zóveel minpunten opleveren bij het plaatsen dat ze die -10 punten voor het níet plaatsen rechtvaardigen.
Het kan volgens mij alleen als je iemand moet gaan plaatsen die als enige vegetariër is in dat huis, bij een niet-roomie in de kamer zit, én nog eens 2 niet-roomies in dat huis heeft zitten. Dan zou plaatsen immers 11 minpunten opleveren, en nietplaatsen 'maar' 10 minpunten...
Maar dan kan je de kamerverdeling ook gewoon even aanpassen, en dan zou het al weer mee moeten vallen (dat wil zeggen: minder dan 10 minpunten voor het plaatsen)...

of zie ik dat verkeerd?

Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
mnielsm schreef op woensdag 06 juni 2007 @ 11:55:
[...]

Ik denk dat dit zonder meer toegestaan is, je zult dan invalidemensen moeten weglaten.
Net zoals er meer deelnemers mogen/kunnen zijn als bedden. Ook dan zul je mensen moeten weglaten.

En ja dat is ook het probleem van deze contest...
- Je weet niet hoe groot de groep zal zijn
- Je weet niet wat voor n vreemde voorkeuren e.d. ze zullen hebben
- Je weet bijna wel zeker dat er wat vreemde dingen in zullen zitten...
ja inderdaad :(

ik zit al steeds te denken aan een scenario waarin er 5 mensen te veel zijn (en waar je dus sowieso 5 mensen weg moet laten) en waar er ook 5 invaliden te veel zijn (dan dat er invalidenhuisjes passen...).
Dan moet je script er dus rekening mee houden dat het 5 invaliden weg moet knikkeren, en niet iemand anders...
maarja, dat komt later wel weer in de 'afwerking' ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Mensen kinderen, ben gister begonnen en dan lijkt alles vrij simpel. Maar blijkt allemaal nog vrij irri te zijn. :P. Ben nog niet zover, ik hoop vandaag de ini bestanden te kunnen inlezen en beetje intelligent gesorteerd te hebben.

Acties:
  • 0 Henk 'm!

  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

_wm_ schreef op woensdag 06 juni 2007 @ 12:02:
[...]

ja inderdaad :(

ik zit al steeds te denken aan een scenario waarin er 5 mensen te veel zijn (en waar je dus sowieso 5 mensen weg moet laten) en waar er ook 5 invaliden te veel zijn (dan dat er invalidenhuisjes passen...).
Dan moet je script er dus rekening mee houden dat het 5 invaliden weg moet knikkeren, en niet iemand anders...
maarja, dat komt later wel weer in de 'afwerking' ;)
Ik sla standaard alle resterende deelnemers over, als het aantal ingelezen deelnemers = aantalhuisjes * personenperhuis
En ook alle invaliden als het aantal invaliden = aantalinvalidenhuisjes * personenperhuis
Wie het eerst komt, wie het eerst maalt.

500 "The server made a boo boo"


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

hmmm
ik ging de invalidenhuisjes als een subset gaan beschouwen, net als de organisatie en de rest
en dan optimaliseren binnen die setjes
maar dat lijkt me nu niet echt verstandig om in alle situaties goed te werken..
hoe verder ik erover nadenk hoe moeilijker 't wordt :p

Acties:
  • 0 Henk 'm!

  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 21:05
era.zer schreef op woensdag 06 juni 2007 @ 12:48:
hmmm
ik ging de invalidenhuisjes als een subset gaan beschouwen, net als de organisatie en de rest
en dan optimaliseren binnen die setjes
maar dat lijkt me nu niet echt verstandig om in alle situaties goed te werken..
hoe verder ik erover nadenk hoe moeilijker 't wordt :p
Dat kan alleen met de organisatie, die voorkeur is een volledige subset.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17:03

Creepy

Tactical Espionage Splatterer

mnielsm schreef op woensdag 06 juni 2007 @ 11:55:
[...]
En ja dat is ook het probleem van deze contest...
Probleem.. probleem... uitdaging :Y)

Een simpele contest waarbij het gros van de entries makkelijk een maximale score kan halen is ook niet leuk natuurlijk :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 12-09 20:53
Volgens mij raak ik achter op het gemiddelde. Nog geen uitvoer gegenereerd.
Afgelopen dagen niet aan het programma gewerkt. Het laatste wat ik gedaan heb, is het maken van de validator. Daarbij kwam ik een paar punten tegen, die ook bij het hoofdprogramma van toepassing zijn. Ondertussen wel opgelost, maar resulteerd wel in spaghetti code. Tijd voor wat opruimwerk.

@DaCota, era.zer
organisatie is zelfs een erg gunstige subset, aangezien je bij hun altij de bonus voor dezelfde voorkeur krijgt. (en met juiste indeling, ook per huisje de extra 2 punten)

Bezoek eens een willekeurige pagina


Acties:
  • 0 Henk 'm!

  • Darkwings
  • Registratie: Mei 2007
  • Laatst online: 15:35
EdwinG schreef op woensdag 06 juni 2007 @ 13:12:
Volgens mij raak ik achter op het gemiddelde. Nog geen uitvoer gegenereerd.
Afgelopen dagen niet aan het programma gewerkt. Het laatste wat ik gedaan heb, is het maken van de validator. Daarbij kwam ik een paar punten tegen, die ook bij het hoofdprogramma van toepassing zijn. Ondertussen wel opgelost, maar resulteerd wel in spaghetti code. Tijd voor wat opruimwerk.

@DaCota, era.zer
organisatie is zelfs een erg gunstige subset, aangezien je bij hun altij de bonus voor dezelfde voorkeur krijgt. (en met juiste indeling, ook per huisje de extra 2 punten)
Die twee punten kun je inderdaad scoren, maar het kan weleens gunstiger uitpakken om te kijken naar (niet)roomies, waarbij je misschien je huisjes niet vol krijgt.

Helaas, op deze manier beinvloedt je subset "organisatie" je subset "overige", dus zijn het in feite geen volledig gescheiden subsets meer...

Acties:
  • 0 Henk 'm!

  • Malthus
  • Registratie: April 2003
  • Laatst online: 23-04 15:30
_wm_ schreef op woensdag 06 juni 2007 @ 12:00:
Het kan volgens mij alleen als je iemand moet gaan plaatsen die als enige vegetariër is in dat huis, bij een niet-roomie in de kamer zit, én nog eens 2 niet-roomies in dat huis heeft zitten. Dan zou plaatsen immers 11 minpunten opleveren, en nietplaatsen 'maar' 10 minpunten...
Maar dan kan je de kamerverdeling ook gewoon even aanpassen, en dan zou het al weer mee moeten vallen (dat wil zeggen: minder dan 10 minpunten voor het plaatsen)...

of zie ik dat verkeerd?
Wat betreft de punten voor die persoon zie je het volgens mij wel goed. Maar in het huisje zitten ook nog andere personen waar je ook nog allemaal punten op kunt inleveren:

Als die ene persoon ook nog niet-roomie is van alle andere mensen in het huisje, dan levert dat ook nog een hele berg strafpunten op. En daarnaast kan de persoon de enige zijn met een afwijkende voorkeur, waardoor je ook nog een hele hoop punten kan mislopen.

Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
Malthus schreef op woensdag 06 juni 2007 @ 14:03:
[...]


Wat betreft de punten voor die persoon zie je het volgens mij wel goed. Maar in het huisje zitten ook nog andere personen waar je ook nog allemaal punten op kunt inleveren:

Als die ene persoon ook nog niet-roomie is van alle andere mensen in het huisje, dan levert dat ook nog een hele berg strafpunten op. En daarnaast kan de persoon de enige zijn met een afwijkende voorkeur, waardoor je ook nog een hele hoop punten kan mislopen.
mja, heb je gelijk in... :) maar ik weet 100% zeker dat elke persoon gewoon punten op kan leveren in plaats van punten te kosten...als de set tenminste een beetje realistisch is... dus niet met 1 iemand die niemand mag en waarvan als enige de voorkeur anders is.

Acties:
  • 0 Henk 'm!

  • EdwinG
  • Registratie: Oktober 2002
  • Laatst online: 12-09 20:53
Darkwings schreef op woensdag 06 juni 2007 @ 13:57:
Die twee punten kun je inderdaad scoren, maar het kan weleens gunstiger uitpakken om te kijken naar (niet)roomies, waarbij je misschien je huisjes niet vol krijgt.

Helaas, op deze manier beinvloedt je subset "organisatie" je subset "overige", dus zijn het in feite geen volledig gescheiden subsets meer...
Hoe beïnvloedden die elkaar dan? De (niet)roomies tussen organisatie en niet-organisatie zijn helemaal niet van toepassing, aangezien ze toch niet bij elkaar geplaatst mogen worden.

Het enige punt is dat je misschien meer organisatiehuisjes gaat gebruiken, wat het indelen van de overigen moeilijker kan maken.

Bezoek eens een willekeurige pagina


Acties:
  • 0 Henk 'm!

  • KoW
  • Registratie: Juli 2001
  • Laatst online: 17-08-2022

KoW

Parse parsed te veel

dat zegt hij dus ;)

Acties:
  • 0 Henk 'm!

  • Darkwings
  • Registratie: Mei 2007
  • Laatst online: 15:35
EdwinG schreef op woensdag 06 juni 2007 @ 14:43:
[...]

Hoe beïnvloedden die elkaar dan? De (niet)roomies tussen organisatie en niet-organisatie zijn helemaal niet van toepassing, aangezien ze toch niet bij elkaar geplaatst mogen worden.

Het enige punt is dat je misschien meer organisatiehuisjes gaat gebruiken, wat het indelen van de overigen moeilijker kan maken.
Je zegt het zelf al :)

Er is dan invloed op het aantal huisjes dat beschikbaar is voor "overigen" door het aantal huisjes dat je gebruikt met "organisatie" (en andersom natuurlijk), en dat kan je zonder twijfel punten kostten. Of, anders gezegd, het kan je weghouden van de ideale oplossing.

Acties:
  • 0 Henk 'm!

  • Siliakus
  • Registratie: November 2000
  • Laatst online: 09-09 15:33
Aangezien ik slechts een java 'basis' heb en er hierdoor veel te veel tijd in gaat zitten om dit uit te bouwen ( jaja heb daadwerkelijk geprobeerd met de contest te beginnen ook :) ), zal ik zelf niet meedoen. Toch wil ik graag mijn idee met jullie delen, omdat ik benieuwd ben of het levensvatbaar is ja of nee (misschien dat iemand er mee aan de slag gaat :p).

Ik had als strategie bedacht om eerst kamers te vullen: dus koppels van personen met dezelfde voorkeur. Deze koppels hebben dan een set van roomies en niet roomies op grond waarvan je meerdere koppels in een huisje kan stoppen. Je hebt hierbij dan als randvoorwaarden dat partners altijd bij elkaar moeten, organisatie altijd bij elkaar moet en het aantal invalidenhuisjes dat beschikbaar is.

Wat vinden jullie er van?

Acties:
  • 0 Henk 'm!

Verwijderd

Siliakus schreef op donderdag 07 juni 2007 @ 07:59:
Aangezien ik slechts een java 'basis' heb en er hierdoor veel te veel tijd in gaat zitten om dit uit te bouwen ( jaja heb daadwerkelijk geprobeerd met de contest te beginnen ook :) ), zal ik zelf niet meedoen. Toch wil ik graag mijn idee met jullie delen, omdat ik benieuwd ben of het levensvatbaar is ja of nee (misschien dat iemand er mee aan de slag gaat :p).

Ik had als strategie bedacht om eerst kamers te vullen: dus koppels van personen met dezelfde voorkeur. Deze koppels hebben dan een set van roomies en niet roomies op grond waarvan je meerdere koppels in een huisje kan stoppen. Je hebt hierbij dan als randvoorwaarden dat partners altijd bij elkaar moeten, organisatie altijd bij elkaar moet en het aantal invalidenhuisjes dat beschikbaar is.

Wat vinden jullie er van?
Klinkt goed :) Zelf heb ik nog niet concreet nagedacht over hoe ik het ga oplossen. Ben net zover dat de ini files worden ingelezen en opgeslagen. Maar misschien ga ik jouw idee wel (deels) implementeren, of een betere zoeken ^^

Acties:
  • 0 Henk 'm!

  • m277755
  • Registratie: Februari 2004
  • Laatst online: 24-01-2022

m277755

leest meer dan hij typt

Ik deel eerst de deelnemers in in kamers en daarna die kamers in huizen en daar haal ik best aardige scores mee. Het indelen in kamers is niet zo moeilijk, die kamers dan weer in huizen stoppen is een stuk moeilijker. Je lost er niet heel veel mee op door het zo te doen, maar het houdt het voor jezelf wel overzichtelijker. Ik denk alleen dat je niet altijd de maximale score kan halen op deze manier, omdat bij het indelen in huizen de kamers al vaststaan.

Acties:
  • 0 Henk 'm!

  • Marcks
  • Registratie: April 2007
  • Laatst online: 01:20
Mijn boomprincipe loopt onderhand tegen wat praktische probleempjes op. Hieronder heb ik even een vereenvoudigde weergave geplaatst van de takken. Als ik begin met een niet-geoptimaliseerde indeling (beginpunt 1), en ik laat alle takken afzoeken die een hogere score hebben dan hun parent, dan kom ik uiteindelijk bij de gewenste oplossing, maar het duurt veel te lang. Bij generatie 3 zit ik dan op meer dan 4 miljoen takken en is mijn score ongeveer 35 punten hoger. En dit is nog maar een testset van slechts 120 bedden!

Mogelijke oplossing: volg enkel de takken die voldoen aan ScoreNieuw > ScoreOud + Ondergrens. Hoe hoger de ondergrens, des te minder takken gevolgd worden. Dit gaat aanzienlijk sneller, maar hierdoor vind ik enkel de geel gemarkeerde oplossing, terwijl ik uiteindelijk bij het grijze rondje wil belanden.

Andere oplossing: begin met een semi-geoptimaliseerde indeling. Als ik vanaf beginpunt 2 start, heb ik eveneens aanzienlijk minder takken te volgen, maar ook de groene takken leiden naar een lokaal optimum dat ik niet wil hebben.

Afbeeldingslocatie: http://i13.tinypic.com/4z2q4bk.jpg

Na lang brainstormen heb ik een expirimentele manier gevonden om dit probleem te verhelpen: ik ga voor elke tak een 'groeipotentie' uitrekenen. Lege invalidenhuisjes en halfgevulde kamers/huisjes hebben hier een positief effect op, mensen die hun roomie of partner als kamergenoot hebben, hebben hier een negatief effect op. Hoe ik dit precies ga afstellen (en of het überhaupt gaat werken), ik heb geen idee, maar ja, deze contest is voor mij van meet af aan al 'trial and error'.

Ik veronschuldig mij bij voorbaat voor het bovenstaande.


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

als je een lokaal optimum hebt, wat random moves uitvoeren?
om eerlijk te zijn zou ik geen boomstructuur gaan gebruiken, de mogelijkheden zijn gewoon exponentieel enorm denk ik

ik vind de contest trouwens heel moeilijk :D
hoe meer ideeen ik heb, hoe moeilijker ik 't vind

zo dacht ik eerst de huisjes zo goed mogelijk in te vullen en de huisjes met een maximale score te houden, maar dat is niet goed denk ik. Zo kan een hogere score mogelijk zijn met een half leeg huisje denk ik.

[ Voor 46% gewijzigd door ? ? op 07-06-2007 12:48 ]


Acties:
  • 0 Henk 'm!

  • Marcks
  • Registratie: April 2007
  • Laatst online: 01:20
era.zer schreef op donderdag 07 juni 2007 @ 12:37:
zo dacht ik eerst de huisjes zo goed mogelijk in te vullen en de huisjes met een maximale score te houden, maar dat is niet goed denk ik. Zo kan een hogere score mogelijk zijn met een half leeg huisje denk ik.
Als je de goed scorende huisjes vastzet, beperk je je flexibiliteit enorm, waardoor je ook de laag scorende huisjes nauwelijks meer kunt verbeteren.

Ik veronschuldig mij bij voorbaat voor het bovenstaande.


Acties:
  • 0 Henk 'm!

  • Dreamer-1982
  • Registratie: Juni 2006
  • Laatst online: 14-09 12:11
Marcks schreef op donderdag 07 juni 2007 @ 11:07:
Mijn boomprincipe loopt onderhand tegen wat praktische probleempjes op. Hieronder heb ik even een vereenvoudigde weergave geplaatst van de takken. Als ik begin met een niet-geoptimaliseerde indeling (beginpunt 1), en ik laat alle takken afzoeken die een hogere score hebben dan hun parent, dan kom ik uiteindelijk bij de gewenste oplossing, maar het duurt veel te lang. Bij generatie 3 zit ik dan op meer dan 4 miljoen takken en is mijn score ongeveer 35 punten hoger. En dit is nog maar een testset van slechts 120 bedden!

Mogelijke oplossing: volg enkel de takken die voldoen aan ScoreNieuw > ScoreOud + Ondergrens. Hoe hoger de ondergrens, des te minder takken gevolgd worden. Dit gaat aanzienlijk sneller, maar hierdoor vind ik enkel de geel gemarkeerde oplossing, terwijl ik uiteindelijk bij het grijze rondje wil belanden.

Andere oplossing: begin met een semi-geoptimaliseerde indeling. Als ik vanaf beginpunt 2 start, heb ik eveneens aanzienlijk minder takken te volgen, maar ook de groene takken leiden naar een lokaal optimum dat ik niet wil hebben.

[afbeelding]

Na lang brainstormen heb ik een expirimentele manier gevonden om dit probleem te verhelpen: ik ga voor elke tak een 'groeipotentie' uitrekenen. Lege invalidenhuisjes en halfgevulde kamers/huisjes hebben hier een positief effect op, mensen die hun roomie of partner als kamergenoot hebben, hebben hier een negatief effect op. Hoe ik dit precies ga afstellen (en of het überhaupt gaat werken), ik heb geen idee, maar ja, deze contest is voor mij van meet af aan al 'trial and error'.
Dit is ongeveer hetzelfde als wat mijn backtrack algoritme doet. Heb je hem wel eens alles laten doorrekenen? Wat is bij jou de hoogste score op de officiele testset die je met dit algoritme behaald? Ik kom niet meer hoger dan 421...

Heb precies hetzelfde probleem als ik een ondergrens instel van de verbetering van een tak dan krijg ik veel minder takken maar houd ik slechts lokale optima over. Ik heb ook zitten denken aan een soort van "ratingsysteem" die moet aangeven hoe veel potentie een tak nog heeft, maar ben daar nog niet verder mee gegaan.

Acties:
  • 0 Henk 'm!

  • Marcks
  • Registratie: April 2007
  • Laatst online: 01:20
Dreamer-1982 schreef op donderdag 07 juni 2007 @ 14:53:
[...]


Dit is ongeveer hetzelfde als wat mijn backtrack algoritme doet. Heb je hem wel eens alles laten doorrekenen? Wat is bij jou de hoogste score op de officiele testset die je met dit algoritme behaald? Ik kom niet meer hoger dan 421...
Helemaal uitrekenen (officiele testset, elke verbetering is een nieuwe tak, niet-geoptimaliseerde startindeling met een score van 18) heb ik nog niet gedaan, want dat kost mij 26 uur voor twee generaties.

Ik veronschuldig mij bij voorbaat voor het bovenstaande.


Acties:
  • 0 Henk 'm!

  • lvh
  • Registratie: Juli 2001
  • Laatst online: 02-11-2022

lvh

era.zer schreef op donderdag 07 juni 2007 @ 12:37:
als je een lokaal optimum hebt, wat random moves uitvoeren?
om eerlijk te zijn zou ik geen boomstructuur gaan gebruiken, de mogelijkheden zijn gewoon exponentieel enorm denk ik

ik vind de contest trouwens heel moeilijk :D
hoe meer ideeen ik heb, hoe moeilijker ik 't vind

zo dacht ik eerst de huisjes zo goed mogelijk in te vullen en de huisjes met een maximale score te houden, maar dat is niet goed denk ik. Zo kan een hogere score mogelijk zijn met een half leeg huisje denk ik.
Ja, mits er mensen zijn die elkaar niet zo graag hebben, is het lucratiever om ze apart te steken (aso's!) dan bij elkaar :-)

Daarom vind ik dat we bonuspunten zouden moeten krijgen voor huisjes die we niet gebruiken, zo is het immers goedkoper :+

Acties:
  • 0 Henk 'm!

  • Dreamer-1982
  • Registratie: Juni 2006
  • Laatst online: 14-09 12:11
Marcks schreef op donderdag 07 juni 2007 @ 15:26:
[...]


Helemaal uitrekenen (officiele testset, elke verbetering is een nieuwe tak, niet-geoptimaliseerde startindeling met een score van 18) heb ik nog niet gedaan, want dat kost mij 26 uur voor twee generaties.
Welke score heb je nu dan maximaal behaald hiermee (dus zonder alle mogelijkheden te berekenen)?

Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
Dreamer-1982 schreef op donderdag 07 juni 2007 @ 14:53:
[...]
Dit is ongeveer hetzelfde als wat mijn backtrack algoritme doet. Heb je hem wel eens alles laten doorrekenen? Wat is bij jou de hoogste score op de officiele testset die je met dit algoritme behaald? Ik kom niet meer hoger dan 421...

Heb precies hetzelfde probleem als ik een ondergrens instel van de verbetering van een tak dan krijg ik veel minder takken maar houd ik slechts lokale optima over. Ik heb ook zitten denken aan een soort van "ratingsysteem" die moet aangeven hoe veel potentie een tak nog heeft, maar ben daar nog niet verder mee gegaan.
ik zou ook kijken naar hoe de andere uitspruitingen scoren... Als je bijv per tak 3 uitspruitingen doet, en twee ervan scoren ver onder de grens, maar eentje haalt het nét, dan zou ik die zeker wel door gaan rekenen omdat er blijkbaar een zeer voordelige wisseling is opgetreden (tov die andere 2 takken)... Als de twee takken echter allebei heel goed scoren en die derde 'slecht' (maar wel boven de minimum grens), dan zou ik alsnog niet naar die derde kijken omdat die andere twee takken een stuk beter zijn...
zoiets misschien?

Ik ben ook wel benieuwd naar hoe je de nieuwe generaties maakt... zomaar random wat mensen verhuizen? of alleen hele kamers verhuizen? Of verhuizen op basis van wat er de vorige keer verhuisd is? of per persoon bijhouden hoe vaak die al verhuisd is sinds de 'wortel' en alleen de personen die het minst vaak verhuisd zijn omruilen met anderen?

Acties:
  • 0 Henk 'm!

  • Dreamer-1982
  • Registratie: Juni 2006
  • Laatst online: 14-09 12:11
_wm_ schreef op donderdag 07 juni 2007 @ 15:56:
[...]


ik zou ook kijken naar hoe de andere uitspruitingen scoren... Als je bijv per tak 3 uitspruitingen doet, en twee ervan scoren ver onder de grens, maar eentje haalt het nét, dan zou ik die zeker wel door gaan rekenen omdat er blijkbaar een zeer voordelige wisseling is opgetreden (tov die andere 2 takken)... Als de twee takken echter allebei heel goed scoren en die derde 'slecht' (maar wel boven de minimum grens), dan zou ik alsnog niet naar die derde kijken omdat die andere twee takken een stuk beter zijn...
zoiets misschien?

Ik ben ook wel benieuwd naar hoe je de nieuwe generaties maakt... zomaar random wat mensen verhuizen? of alleen hele kamers verhuizen? Of verhuizen op basis van wat er de vorige keer verhuisd is? of per persoon bijhouden hoe vaak die al verhuisd is sinds de 'wortel' en alleen de personen die het minst vaak verhuisd zijn omruilen met anderen?
Ik wissel elke deelnemer met elke andere deelnemer, alle morgelijkheden worden dus gecontroleerd. Bij elke wissel wordt gekeken of de totale score omhoog is gegaan, is dit het geval dan wordt het algoritme opnieuw aangeroepen met deze laatste situatie, maar dan 1 stapje dieper de recursie in.
Als je dit laat lopen wordt dus langzaam, tak voor tak alle mogelijkheden doorgerekend. Dit is alleen qua tijd niet te doen! Bij de testset gaat het algoritme vaak (als ik het niet begrens) over een diepte van 100 heen. Dan krijg je dus heel erg veel door te rekenen situaties...

Acties:
  • 0 Henk 'm!

Verwijderd

Zo vanmiddag begonnen (in matlab) en het inlezen is af :) Nu eens kijken of ik nog wat heb geleerd bij Combinatorische Optimalisatie :)

Acties:
  • 0 Henk 'm!

  • KoW
  • Registratie: Juli 2001
  • Laatst online: 17-08-2022

KoW

Parse parsed te veel

Grappig dat veel deelnemers zich eerst concentreren op het inlezen.

Zelf zou ik eerst met het algoritme beginnen en kijken of dat doet wat het moet doen om pas daarna met het inlezen van (grotere) testsets te beginnen.

* KoW heeft nog steeds geen tijd om mee te doen. Over een paar weken mischien

Acties:
  • 0 Henk 'm!

  • 6K
  • Registratie: September 2002
  • Laatst online: 19-01 15:07

6K

is ook zo...

zo vreemd is dat toch niet? als je bijv. met objecten werkt als huisje en deelnemer (of wat dan ook) is het wel handig dat je je algoritme kunt testen met data, toch?

٩(͡๏̯͡๏)۶ ٩(●̮̮̃•̃)۶


Acties:
  • 0 Henk 'm!

  • Marcks
  • Registratie: April 2007
  • Laatst online: 01:20
Ik heb zojuist geconcludeerd dat ik geen idee heb hoe ik een geplande 'groeipotentie' efficiënt kan berekenen. Volgens mij kan het nauwkeurig inschatten van de hoeveelheid nageslacht nooit sneller gebeuren dan het berekenen van de takken zelf. Kortom, voor de zoveelste maal ga ik een /dev/null-taktiek toepassen.

Nieuw idee. Ik heb in het begin van dit topic iemand gezien die zijn deelnemers plotte in een twee-dimensionale ruimte, en ze elkaar vervolgens liet afstoten en aantrekken aan de hand van voorkeuren en onderlinge relaties. Datzelfde principe ga ik denk ik toepassen, maar dan zonder de grote beperking. Het systeem is namelijk heel erg afhankelijk van de startposities. Die kun je volledig random inzetten, maar dat levert geen betrouwbaar resultaat. Je kunt het expirment meermaals herhalen met verschillende startindelingen, maar dat is langzaam, en alsnog een benadering.

Een uniforme verspreiding werkt denk ik al veel beter. Je kunt bijvoorbeeld 100 deelnemers dusdanig op de omtrek van een cirkelschijf plaatsen, dat de afstand tussen elk punt en zijn twee buren constant is. Ook dat is echter niet ideaal, omdat de volgorde waarin de deelnemers geplaatst worden, ook relevant is. Wissel twee buren met elkaar, en de uitkomst kan compleet anders zijn. De afstand van elk punt tot zijn buren is immers constant, de afstand van elk punt tot elk ander punt is nog variërend.

Volledig uniforme verspreiding kan dus op een cirkel enkel met maximaal 3 punten. Als je, door deze drie punten met elkaar te verbinden, een gelijkhoekige driehoek krijgt, is de afstand van elk punt tot elk ander punt gelijk. Op een lijn kan dat met maximaal 2 punten. Op een bol kan dat met maximaal 4, je krijgt dan een tetraëder. Oftewel:

Één dimensieLijn/LijnstukMaximaal 2 punten
Twee dimensiesCirkel/Gelijkhoekige driehoekMaximaal 3 punten
Drie dimensiesBol/TetraëderMaximaal 4 punten


Kortom, het aantal benodigde dimensies om een n aantal deelnemers uniform op te verspreiden, is n-1. Nu is het verspreiden op één, twee, of drie dimensies nog niet heel ingewikkeld. Coördinaten onderstaand...

nmax = 2
(-1);
(1)

nmax = 3
x(n) = cos (n * 2 pi) / nmax
y(n) = sin (n * 2 pi) / nmax

nmax = 4
(1, 1, 1);
(-1, -1, 1);
(-1, 1, -1);
(1, -1, -1)

Ik kan hieruit echter nog niet bepaald een algemene formule afleiden voor de x-, y-, z- en enzovoortscoördinaten voor een ruimte met vier, vijf of honderdzesentwintig dimensies. Waarschijnlijk gaat mijn QBasic vreemde streken uithalen wanneer ik een array met meer dan 10 dimensies probeer te definiëren, maar goed, volgende week is er nog steeds een /dev/null. :p Hoe dan ook, is iemand hier een wiskundig meesterbrein die mij hierbij kan helpen?


Overigens, ik gebruik gewoon MS' Windows, maar /dev/null klinkt zo lekker. 8)

Ik veronschuldig mij bij voorbaat voor het bovenstaande.


Acties:
  • 0 Henk 'm!

  • bomberboy
  • Registratie: Mei 2007
  • Laatst online: 22:49

bomberboy

BOEM!

Marcks schreef op vrijdag 08 juni 2007 @ 12:06:

Nieuw idee. Ik heb in het begin van dit topic iemand gezien die zijn deelnemers plotte in een twee-dimensionale ruimte, en ze elkaar vervolgens liet afstoten en aantrekken aan de hand van voorkeuren en onderlinge relaties. Datzelfde principe ga ik denk ik toepassen, maar dan zonder de grote beperking. Het systeem is namelijk heel erg afhankelijk van de startposities. Die kun je volledig random inzetten, maar dat levert geen betrouwbaar resultaat. Je kunt het expirment meermaals herhalen met verschillende startindelingen, maar dat is langzaam, en alsnog een benadering.

Een uniforme verspreiding werkt denk ik al veel beter.

...

Ik kan hieruit echter nog niet bepaald een algemene formule afleiden voor de x-, y-, z- en enzovoortscoördinaten voor een ruimte met vier, vijf of honderdzesentwintig dimensies.
Gewoon per dimensie een extra coördinaat?

vb. voor 5 dimensies: (x1,x2,x3,x4,x5)
(1,0,0,0,0)
(0,1,0,0,0)
(0,0,1,0,0)
(0,0,0,1,0)
(0,0,0,0,1)

met een gewone euclidische afstandsfunctie als sqrt((x1-y1)^2 + (x2-y2)^2 + (x3-y3)^2 + (x4-y4)^2 + (x5-y5)^2) liggen al deze punten dan even ver uit elkaar. (namelijk afstand 1 :))
Ik zie niet echt in waarom je het jezelf moeilijk zou proberen te maken door het met één dimensie minder proberen te doen, probeer het je gewoon niet grafisch voor te stellen :)

Overigens is bovenstaande tactiek erg gelijkaardig aan de technieken die gebruikt worden in de statistische analyse van data (namelijk de clustering en partitionerings-problemen). Maar straks word ik dan vast weer beschuldigd van theoretisch geneuzel ofzo...

Een alternatief om het toch in 2 dimensies te doen is iedereen op dezelfde plaats te laten beginnen. Begin-afstand is dan uniform, namelijk 0 en de boel verpreidt zich wel. En indien je de "wereld" waarin je stipjes bewegen een toroïde maakt vermijd je ook dat "compatibelen" de andere kant opgaan en elkaar nooit meer terugzien. (toroïde wereld: het vierkant waar je iedereen in los laat is niet oneindig uitgestrekt langs alle kanten, maar als je er bovenaan afloopt kom je er onderaan weer bij enz.)

Acties:
  • 0 Henk 'm!

  • Marcks
  • Registratie: April 2007
  • Laatst online: 01:20
bomberboy schreef op vrijdag 08 juni 2007 @ 13:07:
[...]


Gewoon per dimensie een extra coördinaat?

vb. voor 5 dimensies: (x1,x2,x3,x4,x5)
(1,0,0,0,0)
(0,1,0,0,0)
(0,0,1,0,0)
(0,0,0,1,0)
(0,0,0,0,1)

met een gewone euclidische afstandsfunctie als sqrt((x1-y1)^2 + (x2-y2)^2 + (x3-y3)^2 + (x4-y4)^2 + (x5-y5)^2) liggen al deze punten dan even ver uit elkaar. (namelijk afstand 1 :))
Ik zie niet echt in waarom je het jezelf moeilijk zou proberen te maken door het met één dimensie minder proberen te doen, probeer het je gewoon niet grafisch voor te stellen :)
O mijn god, ik voel me ineens heel dom. De oplossing was echt wel heel simpel. Enfin, om mijn self-esteem nog maar een beetje op te pompen, de afstand tussen die vijf punten in vijf dimensies is natuurlijk niet 1, maar wortel 2. Nou ja, mocht ik me ooit vervelen, ik heb in ieder geval een leuk puzzeltje om vijf punten in vier dimensies te stoppen. :)

*Een minuut later

Bond tegen vloeken, beware, ik ben flink pissed! Vijf deelnemers: 'Subscript out of range'. Dynamische arrays: 'Out of memory'. D'r gaan hier monitoren sneuvelen vandaag! :(

Ik veronschuldig mij bij voorbaat voor het bovenstaande.


Acties:
  • 0 Henk 'm!

  • Darkwings
  • Registratie: Mei 2007
  • Laatst online: 15:35
Marcks schreef op vrijdag 08 juni 2007 @ 13:35:
[...]


O mijn god, ik voel me ineens heel dom. De oplossing was echt wel heel simpel. Enfin, om mijn self-esteem nog maar een beetje op te pompen, de afstand tussen die vijf punten in vijf dimensies is natuurlijk niet 1, maar wortel 2. Nou ja, mocht ik me ooit vervelen, ik heb in ieder geval een leuk puzzeltje om vijf punten in vier dimensies te stoppen. :)

*Een minuut later

Bond tegen vloeken, beware, ik ben flink pissed! Vijf deelnemers: 'Subscript out of range'. Dynamische arrays: 'Out of memory'. D'r gaan hier monitoren sneuvelen vandaag! :(
Gebruik dan ook een normale programmeertaal :P

Deelnemer **************************************lDeelnemerArray;
lDeelnemerArray[0][0][0]...[0] = Pietje;

:P

no troll intended

Acties:
  • 0 Henk 'm!

  • bomberboy
  • Registratie: Mei 2007
  • Laatst online: 22:49

bomberboy

BOEM!

Marcks schreef op vrijdag 08 juni 2007 @ 13:35:
[...]
Enfin, om mijn self-esteem nog maar een beetje op te pompen, de afstand tussen die vijf punten in vijf dimensies is natuurlijk niet 1, maar wortel 2.
Uiteraard... |:( (Oops?)
Voor de efficiëntie kan je natuurlijk ook andere afstandsfuncties gebruiken zoals de Manhattan distance (|x1 - x2| + |y1 - y2|). Dan moet je die wortel niet trekken, gaat vermoedelijk sneller. (of gewoon de euclidische zonder de wortel)
Bond tegen vloeken, beware, ik ben flink pissed! Vijf deelnemers: 'Subscript out of range'. Dynamische arrays: 'Out of memory'. D'r gaan hier monitoren sneuvelen vandaag! :(
Hmm, je hebt per persoon toch gewoon een array van lengte n nodig (met n == aantal personen == dimensie)? Of wat zie ik over het hoofd?

Acties:
  • 0 Henk 'm!

  • Marcks
  • Registratie: April 2007
  • Laatst online: 01:20
bomberboy schreef op vrijdag 08 juni 2007 @ 14:51:
[...]

Hmm, je hebt per persoon toch gewoon een array van lengte n nodig (met n == aantal personen == dimensie)? Of wat zie ik over het hoofd?
Nee, ik heb gewoon mijn verstand uit staan. De array hoeft inderdaad niet meer te zijn dan positie(1 TO n,1 TO n), met n als aantal personen. Afgezien daarvan, met een 32 bits array, kan ik slechts 272 deelnemers aan, dan heb ik de locatie (nog niet de snelheid) gedefinieerd. Een signed integer van 16 bits is denk ik meer dan genoeg overigens, mijn window heeft dan een breedte/hoogte/diepte/whatever van 65536. Als ik dan een array van dezelfde grootte definieer voor de snelheid, en een beetje geheugen overhoud voor de andere zooi, kan ik maximaal circa 300 deelnemers aan.

Lang leve QBasic!

Kortom, ik zal functies moeten gaan maken die getallen omzetten in binaire troep, precisie de deur uit doen, en opslaan als bytes! Geheugenmanagement op hoog niveau. 8)

Ik veronschuldig mij bij voorbaat voor het bovenstaande.


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

why the f*ck gebruik je niet een normale taal?
zoveel problemen die je oploopt door gewoon al qbasic, ipv te gaan fixen op de algoritmes? Als ik zie wat je hier typt ben je een slimme jongen, stel je voor wat je allemaal zou kunnen met een deftige taal :P

Acties:
  • 0 Henk 'm!

  • Darkwings
  • Registratie: Mei 2007
  • Laatst online: 15:35
era.zer schreef op vrijdag 08 juni 2007 @ 15:49:
why the f*ck gebruik je niet een normale taal?
zoveel problemen die je oploopt door gewoon al qbasic, ipv te gaan fixen op de algoritmes? Als ik zie wat je hier typt ben je een slimme jongen, stel je voor wat je allemaal zou kunnen met een deftige taal :P
My sentiments exactly.

Een programmeertaal moet een tool zijn die je gebruikt om een probleem op te lossen, het moet niet zo zijn dat het grootste deel van de problemen die je oplost geintroduceert is door je tool. Je bent toch zeker MacGyver niet :)

Acties:
  • 0 Henk 'm!

  • Marcks
  • Registratie: April 2007
  • Laatst online: 01:20
Darkwings schreef op vrijdag 08 juni 2007 @ 16:05:
[...]


My sentiments exactly.

Een programmeertaal moet een tool zijn die je gebruikt om een probleem op te lossen, het moet niet zo zijn dat het grootste deel van de problemen die je oplost geintroduceert is door je tool. Je bent toch zeker MacGyver niet :)
Laten we zeggen dat ik van een uitdaging houd. Een paar weken geleden dacht ik nog hoe cool het zou zijn als ik kont schop in QBasic, maar ik moet zeggen dat talen als delphi of php met de dag aantrekkelijker worden. Voor de meer gangbare talen als Java en Cnogwat zal ik flink in de naslagwerken moeten duiken, en ik werk volgens het principe: Ik kan in Japan beter terecht met mijn vloeiend Engels dan mijn gebrekkig Japans. Bovendien, met deze contest valt toch niets te winnen, dus fun staat boven prestatie op mijn lijstje. En het praktische gedeelte, wat is er mis met het opslaan van variabele x door x$ = CHR$(x) te gebruiken? Don't answer that. :p

...afgezien het feit dat de jury er flink de pest in zal hebben wanneer ze mijn broncode doorspitten. ;)

[ Voor 5% gewijzigd door Marcks op 08-06-2007 17:10 ]

Ik veronschuldig mij bij voorbaat voor het bovenstaande.


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

als je 't in assembly doet ben je mijn held!

Acties:
  • 0 Henk 'm!

  • Marcks
  • Registratie: April 2007
  • Laatst online: 01:20
Haha, als ik al iets in assembly doe, is het een programmeeromgeving ontwikkelen. :p

Ik veronschuldig mij bij voorbaat voor het bovenstaande.


Acties:
  • 0 Henk 'm!

Verwijderd

Ben niet zo actief op tweakers maar ik ga denk ook een poging wagen in PHP wanneer ik tijd heb :P
Echt een mega goede programmeur ben ik niet maar hier kan ik aardig van leren denk :)

Acties:
  • 0 Henk 'm!

  • Darkwings
  • Registratie: Mei 2007
  • Laatst online: 15:35
Marcks schreef op vrijdag 08 juni 2007 @ 18:01:
Haha, als ik al iets in assembly doe, is het een programmeeromgeving ontwikkelen. :p
Zelfs dat is onzinnig :P

Als je al iets in assembly doet, doe 't dan omdat je compiler niet slim genoeg is :P

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17:03

Creepy

Tactical Espionage Splatterer

Marcks schreef op vrijdag 08 juni 2007 @ 18:01:
Haha, als ik al iets in assembly doe, is het een programmeeromgeving ontwikkelen. :p
Als je daarin dan je entry maakt en de gebruikte compiler / interpreter ook mee opstuurd.... :P

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • _wm_
  • Registratie: Mei 2007
  • Laatst online: 29-04 21:51
Marcks schreef op vrijdag 08 juni 2007 @ 16:30:
[...]


Laten we zeggen dat ik van een uitdaging houd. Een paar weken geleden dacht ik nog hoe cool het zou zijn als ik kont schop in QBasic, maar ik moet zeggen dat talen als delphi of php met de dag aantrekkelijker worden.
Als je in PHP aan de slag wilt, lijkt het me wel leuk om samen iets uit te denken ;) Kunnen we samen niks winnen :+

Acties:
  • 0 Henk 'm!

  • Darkwings
  • Registratie: Mei 2007
  • Laatst online: 15:35
Jeej, ik heb m'n score al opgekrikt van 18 naar 74, en ik hoop nog wel wat hoger te komen vanavond ;)

Acties:
  • 0 Henk 'm!

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
KoW schreef op vrijdag 08 juni 2007 @ 09:28:
Grappig dat veel deelnemers zich eerst concentreren op het inlezen.

Zelf zou ik eerst met het algoritme beginnen en kijken of dat doet wat het moet doen om pas daarna met het inlezen van (grotere) testsets te beginnen.

* KoW heeft nog steeds geen tijd om mee te doen. Over een paar weken mischien
Ik zou qua prioriteit aanhouden:
1) Een praktische datastructuur verzinnen voor de personen en huisjes die efficient te doorzoeken is.
2) Het inlezen van de invoerbestanden
3) Het bepalen van het puntenaantal voor een bepaalde configuratie.
4) Wegschrijven van een configuratie.
5) Het implementeren van een zoekalgoritme.

Het belangrijkste komt (voor mij in ieder geval) het laatste. Dit klinkt in eerste instantie misschien contra-intuitief, maar je hebt gewoon een bepaalde basis nodig voordat je met het interessante gedeelte aan de slag kan.

Wat overigens niet wil zeggen dat je niet van tevoren kunt nadenken over het zoekalgoritme, maar om daadwerkelijk uit te vinden hoe het zich gedraagt in bepaalde situaties en wat de zwakke punten ervan zijn, daarvoor zul je (vaak) toch een implementatie moeten kunnen runnen.
Pagina: 1 ... 8 ... 11 Laatste

Dit topic is gesloten.