Welke formule te gebruiken voor het volgend probleem

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • VRT19
  • Registratie: Juni 2017
  • Laatst online: 23-10-2020
Ik hoop dat ik een beetje kan uitleggen waar ik naar opzoek ben... ...lets give it a try.

Ik heb een voetbal bordspel gemaakt samen met mijn broer. Om te bepalen hoe goed een speler is gebruiken we een systeem waarbij spelers zijn opgebouwd uit 9 verschillende waardes.

Nu ben ik bezig een programmaatje te schrijven die de waardes voor een speler kan genereren. Een speler is opgebouwd uit 9 verschillende waarden. Om een speler te genereren moet je een getal ( A ) invoeren. Dit is het totaal aantal punten die verdeeld mogen worden over deze 9 waarden. Naast A voer je nog een waarde in ( B ). Het programma genereert een willekeurig getal tussen 0 en B en telt dit op bij A.

Nou is het de bedoeling dat de lagere en hogere getallen binnen de range van B een kleinere kans hebben om gekozen te worden. Om dit te bereiken wilde ik het programma een willekeurig getal laten kiezen tussen 0 en 100 ( C ) die vervolgens bepaald welke getal binnen de range van B gekozen worden.

Met in gedacht dat de lagere en hogere getallen een kleinere kans hebben om gekozen te worden zal dat volgens de volgende grafiek moeten gebeuren:

Afbeeldingslocatie: https://info.math4all.nl/MathAdore/Images/vb-cg11-th1-t1.jpg

Dan gaat het alleen even om de rode lijn. In deze grafiek is dan C (0 tot 100) de horizontale as (x) en B de verticale as (y). De minimale waarde is altijd 0 en de maximale waarde is het getal die je voor B hebt ingesteld, met andere woorden: als C = 100 dan B = ingestelde waarde.

Nu heb ik dus wel de grafiek gevonden, alleen niet de formule die daar bij hoort.

De vraag is dus met welke formule kan ik C invoeren waar dan vervolgens B uit komt.

Ik hoop dat ik mijn probleem een beetje uit heb kunnen leggen, alvast bedankt voor elk antwoord _/-\o_

Beste antwoord (via VRT19 op 14-06-2017 18:10)


  • ilm
  • Registratie: April 2014
  • Laatst online: 11:23

ilm

Wil je eigenlijk niet gewoon de normal distribution gebruiken? Of beter gezegd: de beta distribution omdat die naar 0 gaat (compact support):
Wikipedia: Beta distribution
https://docs.scipy.org/do...ed/numpy.random.beta.html

Je genereert dan gewoon je B uit die distributie (je kiest de shape parameters zodanig dat het een beetje lijkt op wat je wil).

Als je jouw methode wilt dan trekt die curve een beetje op een geshifte en geinverteerde C^2. Iets van
-(C-50)^2. Je schaalt het dan nog zodat het in de range van B ligt.

Had ik een mooi plotje gemaakt kan ik het precies niet uploaden. Niet genoeg karma, vervelend :(

Edit: Of wil je de volledige curve? Weet eigenlijk niet of dat exact is wat je wilt in verband met meer kans voor B/2 en minder voor de lage en hoge waarden.

Edit2: gebruik gewoon de normale distributie:

B = randn(50, 2*50) # het getal 50 wordt het meest gekozen met een variantie van 2*50.

# in 5 percent van de gevallen zal B buiten je bounds liggen. gewoon clippen
if B < 0: B =0
if B > 100: B = 100

[ Voor 21% gewijzigd door ilm op 14-06-2017 12:10 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 16-06 13:21

MAX3400

XBL: OctagonQontrol

Google images -> upload jouw image -> he, in het Engels heet dat "inflection points".

Een vergelijkbare grafiek vind je dus op
Afbeeldingslocatie: http://www.solitaryroad.com/c359/ole37.gif
En daar staat een formule uitgeschreven ;)

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • Kridri
  • Registratie: Juli 2012
  • Laatst online: 28-03 08:28
Iedere functie kan je herschrijven naar de vorm y(x) = An*x^n + An-1*x^n-1+.... + A0+x^0. Waarbij An t.e.m. A0 constante getallen zijn en n een natuurlijk getal.
En als ik de functie zo zie is dit een functie met een oneven exponent. Iets van de vijfde macht denk ik.
Dus neem een vijfde machtsfunctie en speel wat met de constante tot je een functiekrijgt die overeenkomt. Indien je vijf punten hebt waaraan de functie moet voldoen kan je de constante exact bepalen.

Even met de waarden van de poster hierboven een fit uitgevoerd. Voor een derde orde functie bekomen wij het volgende: y(x) = x^3 -3x^2 -5*10-14x+6 (de term met 5*10^-14 is praktisch gezien nul). Voor een vijde orde model bekomen wij hetzelfde met de termen voor de vijfde en vierde macht nagenoeg nul.

[ Voor 24% gewijzigd door Kridri op 14-06-2017 10:04 ]

Als iedereen een klein beetje luier was, zouden er een heleboel problemen zo de wereld uit zijn


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15:03

NMe

Quia Ego Sic Dico.

Wiskundige vragen hebben niet per se veel met programmeren te maken.

Programming >> Actualiteit, Wetenschap & Maatschappij

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • ilm
  • Registratie: April 2014
  • Laatst online: 11:23

ilm

Wil je eigenlijk niet gewoon de normal distribution gebruiken? Of beter gezegd: de beta distribution omdat die naar 0 gaat (compact support):
Wikipedia: Beta distribution
https://docs.scipy.org/do...ed/numpy.random.beta.html

Je genereert dan gewoon je B uit die distributie (je kiest de shape parameters zodanig dat het een beetje lijkt op wat je wil).

Als je jouw methode wilt dan trekt die curve een beetje op een geshifte en geinverteerde C^2. Iets van
-(C-50)^2. Je schaalt het dan nog zodat het in de range van B ligt.

Had ik een mooi plotje gemaakt kan ik het precies niet uploaden. Niet genoeg karma, vervelend :(

Edit: Of wil je de volledige curve? Weet eigenlijk niet of dat exact is wat je wilt in verband met meer kans voor B/2 en minder voor de lage en hoge waarden.

Edit2: gebruik gewoon de normale distributie:

B = randn(50, 2*50) # het getal 50 wordt het meest gekozen met een variantie van 2*50.

# in 5 percent van de gevallen zal B buiten je bounds liggen. gewoon clippen
if B < 0: B =0
if B > 100: B = 100

[ Voor 21% gewijzigd door ilm op 14-06-2017 12:10 ]


Acties:
  • 0 Henk 'm!

  • VRT19
  • Registratie: Juni 2017
  • Laatst online: 23-10-2020
@ilm Ik begreep niet helemaal wat je me uitlegde, maar het heeft me wel in de goeie richting gestuurd. De Beta Distribution was precies waar ik naar op zoek was.

Ik inmiddels de formule zover dat wanneer C = 0, B = 0 en wanneer C = 100, B = ingestelde waarde.

Nu moet ik nog even spelen met de curve want die is nog niet helemaal naar mijn zin. Maar in ieder geval bedankt voor de informatie!
Pagina: 1