Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VB.Net] zoek filter adhv indexatie score

Pagina: 1
Acties:

  • NLAnaconda
  • Registratie: Januari 2007
  • Laatst online: 03-07 12:42
Bij gebrek hoe ik dit topic moet noemen deze titel bedacht.

Situatie
Ik heb een hele lijst steden met daarbij bepaalde eigenschappen die ze hebben. Deze eigenschappen hebben (afhankelijk hoe interessant deze zijn) een score.
Fictief voorbeeld:

PlaatsBergachtigNatuur
Kaapstad12172
Amsterdam1220
Antwerpen5007


Wat ik wil bereiken
Ik wil dat de gebruiker aan kan geven dat ze een plaats zoeken die aan bepaalde eigenschappen voldoet. Hoe belangrijk ze deze eigenschap vinden wordt aangegeven via een getal (invoer) van 0 - 4 (0 = niet belangrijk, 4 = kan niet zonder). Nu wil ik dat het programma a.d.h.v. deze input een suggestie voorschotelt.

Bijvoorbeeld: De bezoeker wil een bergachtige plaats (4) en natuur is niet belangrijk (0) -> Antwerpen.
Voorbeeld 2: De bezoeker wil een plaats met natuur (3) en bergen zijn niet belangrijk (0) -> Amsterdam.
Voorbeeld 3: De bezoeker wil natuur (3) en bergen (4) -> Kaapstad.

Mijn (onjuiste) oplossing
Ik dacht dat ik dit kon bereiken door de "score van de eigenschap" te vermenigvuldigen met de "belangrijkheids invoer" om daarna een totaalscore per plaats te krijgen.

code:
1
Formule: ([eigenschapsscore-bergen] * [inputwaarde-bergen]) + ([eigenschapsscore-natuur] * [inputwaarde-natuur]) = totaalscore.


Dit werkt prima als er gezocht wordt op 1 eigenschap:
Invoer: Bergen 4, natuur 0.
Uitvoer: Antwerpen
PlaatsBergachtigNatuurTotaalscore
Antwerpen(500 * 4) = 2000(7 * 0) = 02000
Kaapstad(121 * 4) = 484(72 * 0) = 0484
Amsterdam(1 * 4) = 4 (220 * 0) = 04


Probleem
Het probleem speelt op als er meerdere interesses worden opgegeven.
Invoer: Bergen 4, natuur 4.
Uitvoer: Antwerpen
PlaatsBergachtigNatuurTotaalscore
Antwerpen(500 * 4) = 2000(7 * 4) = 282028
Amsterdam(1 * 4) = 4 (220 * 4) = 880884
Kaapstad(121 * 4) = 484(72 * 4) = 288772


De uitvoer is Antwerpen omdat deze de hoogste score heeft. Maar dit is niet de uitvoer die ik wil hebben. Ik wil dat het programma met Kaapstad komt omdat deze beter voldoet aan de wensen van de gebruiker.

Ik moet de totaalscore per onderdeel dus kunnen relativeren aan de overige.


De vraag:
Hoe bereken ik a.d.h.v. de eigenschappen welke plaats het meest interessant is.

[ Voor 80% gewijzigd door NLAnaconda op 09-12-2014 15:49 ]


  • Montaner
  • Registratie: Januari 2005
  • Laatst online: 14-11 10:35
Dan klopt je score systeem simpelweg toch niet? Als bergen in dit geval ZO interessant zijn, en in dit geval ZO goed in Antwerpen, is dit toch een valide antwoord?

  • NLAnaconda
  • Registratie: Januari 2007
  • Laatst online: 03-07 12:42
Mja, het scoringssysteem klop m.i. wel, de formule die de de meest interessante plaats berekent klopt niet.

Antwerpen kan extreem bergachtig zijn met belangrijke bergen in de buurt (mont blanc, everest, etc) en daardoor een hele hoge score hebben voor de eigenschap "bergen". Maar natuur is er amper.

Kaapstad kan bergachtig zijn (maar toch lang niet zo als antwerpen) en redelijk wat natuur hebben.

Dan is Kaapstad voor iemand die bergen én natuur wil meer interessant, die heeft van beiden gemiddeld de hoogste score.

Hoe bereken ik wat de beste output is voor de bezoeker.

  • seth007
  • Registratie: November 2010
  • Laatst online: 20-11 14:09
Antwerpen is echt wel de beste keuze in dit voorbeeld ...
Uw gebruiker heeft zeer duidelijk gesteld dat die bergen veel belangrijker zijn dan de natuur.

Als ik het goed begrijp dan bereken je een maximale score per stad, deze maximale score is afhankelijk van de keuze van de gebruiker, en hoe meer waarde hij aan een bepaalde eigenschap toewijst, hoe meer die doorweegt, ...

Dus dat is precies wat uw formule doet.

  • NLAnaconda
  • Registratie: Januari 2007
  • Laatst online: 03-07 12:42
Maar als de gebruiker stelt dat natuur belangrijker is: 4
en bergen een stuk minder belangrijk: 2

Invoer: Bergen 2, natuur 4.
Uitvoer: Antwerpen
PlaatsBergachtigNatuurTotaalscore
Antwerpen(500 * 2) = 1000(7 * 4) = 281028
Amsterdam(1 * 2) = 2 (220 * 4) = 880882
Kaapstad(121 * 2) = 242(72 * 4) = 288530


Dan komt Kaapstad nog als laatst eruit. Terwijl de gebruiker aangeeft natuur (4) belangrijker te vinden dan bergen (2)

  • seth007
  • Registratie: November 2010
  • Laatst online: 20-11 14:09
Ja dat klopt en is logisch, het probleem ligt helemaal niet in je formule, maar in de schaalverdeling en toewijzing van het "gewicht", namelijk die initiële monsterscore die antwerpen reeds weet te behalen. Blijkbaar is de aanwezigheid van de bergen daar in uw systeem goed voor een toewijding van 500 punten!! Een andere stad moet dan minimaal zo een 125 punten hebben met een vermenigvuldiging van 4 (zeer belangrijk), om hetzelfde te scoren.

Ik vrees dat trix0r gelijk heeft, en er een probleem is bij de toewijzing van de initiële scores.

  • TheOmen
  • Registratie: September 2011
  • Laatst online: 16:16
Als je iedere plaats een gelijk aantal punten geeft, en deze verdeelt over de twee eigenschappen kom je m.i. een stuk verder. Je geeft dan beter de onderlinge verschillen aan ipv iedere plaats een arbitraire waarde mee te geven.

Running is nothing more than a series of arguments between the part of your brain that wants to stop and the part that wants to keep going.


  • NLAnaconda
  • Registratie: Januari 2007
  • Laatst online: 03-07 12:42
TheOmen schreef op dinsdag 09 december 2014 @ 16:08:
Als je iedere plaats een gelijk aantal punten geeft, en deze verdeelt over de twee eigenschappen kom je m.i. een stuk verder. Je geeft dan beter de onderlinge verschillen aan ipv iedere plaats een arbitraire waarde mee te geven.
Je bedoeld de 100% verdelen over de eigenschappen die een plaats heeft:
Bijvoorbeeld: 80% berg, 20% natuur, etc?

Dat is misschien een idee ja.

  • TheOmen
  • Registratie: September 2011
  • Laatst online: 16:16
Dat ja. Geef iedere plaats (bijvoorbeeld) 500 punten en verdeel die over de eigenschappen.

Running is nothing more than a series of arguments between the part of your brain that wants to stop and the part that wants to keep going.


  • NLAnaconda
  • Registratie: Januari 2007
  • Laatst online: 03-07 12:42
TheOmen schreef op dinsdag 09 december 2014 @ 16:15:
Dat ja. Geef iedere plaats (bijvoorbeeld) 500 punten en verdeel die over de eigenschappen.
Echter geeft dat het onderlinge verschil per plaats toch niet aan?

Stel ik verdeel 500 punten over een plaats met 1 berg en geen natuur
dan heeft die plaats 500 punten voor bergen en 0 voor natuur.

Is er een andere plaats met 2 bergen en 1 natuur dan, dan heeft die plaats 333 bergen en 166 natuur.
Terwijl er meer bergen te vinden zijn dan de vorige plaats heeft deze een lagere score.


Misschien is dit wat:
Ik denk dat ik de waarde van alle bergen moet optellen = 100%.
En aan de hand van de hoeveelheid bergen het percentage per plaats moet berekenen.

Totaal zijn er 3 bergen = 100%, 1 natuur = 100%
Plaats 1 heeft 1 berg, 0 natuur = 33% berg, 0% natuur
Plaats 2 heeft 2 bergen, 1 natuur = 66% berg en 100% natuur

  • Mavamaarten
  • Registratie: September 2009
  • Laatst online: 22:10

Mavamaarten

Omdat het kan!

Met NLAnaconda. Je moet een geldige schaal hebben van "bergachtig" en "natuur". Momenteel is het appels met peren vergelijken. Kies een vaste min en max, neem voor de gemakkelijkheid 0 - 10 of 0 - 100. En vooral belangrijk: kies voor beiden dezelfde schaal.

PlaatsBergachtig (score op 10)Natuur (score op 10)
Kaapstad27
Amsterdam19
Antwerpen56

Nu kan je
code:
1
Eindscore = bergachtig * (gewicht_bergachtig / 4) + natuur * (gewicht_natuur / 4)

Als je het gewenste gewicht invoert van 0 tot 4.

Android developer & dürüm-liefhebber


  • NLAnaconda
  • Registratie: Januari 2007
  • Laatst online: 03-07 12:42
Thanks Mavamaarten,

Dit lijkt een heel stuk beter te werken.
Pagina: 1