WisFaq!

\require{AMSmath} geprint op zondag 24 november 2024

Systeem bestaande uit samenhangende formule`s

Ik heb deze vraag proberen te stellen in diverse programmeer forums. Echter zonder al teveel resultaat. Dit komt denk ik omdat het probleem meer wiskundig is dan dat het specifiek met programmeren te maken heeft en daarom stel ik hem hier.

Inleiding: Ik ben op zoek naar een wiskundige aanpak of model om de optimale oplossing te zoeken uit deze formule's

Startwaardes:
t = 0 (tijd)
A = 1
B = 1000
C = 1
D = 100000
E = 100
F = 5

A = floor(C / 50)
- wordt geupdate als C wordt bijgewerkt

B = B + round(A * Eu * 1000)
- wordt geupdate op een zelf te kiezen moment
- B_max = 50000
- E = E - Eu

C = C + 1
- wordt geupdate op een zelf te kiezen moment
- om + 1 te krijgen moet waar zijn: floor( Eu /(50/F) )=1 en floor(Du/100000)=1 (voor +2 bij beide formules = 2)
- E = E - Eu
- D = D - Du

D = D + B
- wordt geupdate voor iedere keer dat t gebeurt

E = E + 4 (iedere keer dat t gebeurt)
- wordt geupdate voor iedere keer dat t gebeurt

F = F + floor((A * Eu) / 200)
- wordt geupdate op een zelf te kiezen moment
- F_max = 15
- E = E - Eu

G = round(A * Eu)
- E = E - Eu

Ik ben proberen een systeem te beschrijven met de bovenstaande formules. Voor iedere variabelen (A t/m G) staat een formule opgesteld. Sommige hiervan worden automisch op een bepaalde tijd uitgevoerd andere op een zelf te bepalen moment.
Als bepaalde formules wordt uitgevoerd staat daaronder bij welke voorwaardes dat mag en welke andere formules ook uitgevoerd moeten worden.

Nu wil ik graag G op 10000 brengen in zo min mogelijk tijd. Nu kan ik gewoon wachten tot dat E 10000 wordt, want A = 1 in het begin, maar dit is een hele ineffectieve methode.
Ik kan dit versnellen door A te verhogen. Om dit te doen moet C verhoogt worden en daarvoor moeten D en E bepaalde waardes hebben bereikt. De startwaardes van D en E staan toe om dit 1x te doen (op t=0). Nu hoef ik nog maar (ongeveer) 5000 E te hebben.
Op een gegeven moment wordt C moeilijker om te verhogen omdat D eerder tegen een grens aanloopt dan E. Dit kan weer verbeterd worden door B.
Het -KAN- zijn dat E ook een beperkende factor wordt dan is het nuttig om F te gebruiken zodat er minder E nodig is om C te verhogen.

De oplossing hiervoor is niet 1,2,3 te vinden. Wat ik graag zou willen weten hoe ik dit probleem programmeer technisch het beste zou kunnen aanpakken. Ik heb het al zover ZONDER F erbij, maar nu ik deze zou willen toevoegen wordt het me te complex om nog overzicht te houden. Hoe kan ik nou bij zoiets makkelijk variabelen toevoegen en de effecten hiervan bekijken?
Zover ik het had had ik t tegen C uitgezet en dan een tabel gevuld met de bijhorende G waarde en dan maar zoeken in deze matrix wat de optimale oplossing was. Hoewel dit goed werkte weet ik niet of dit de beste oplossing is.
Het liefste zou ik een methode verkregen die me gewoon 1 oplossing uitgeeft die de beste is ipv een heleboel en dan zelf nog zoeken.
Ik denk dat het lastig is om dit systeem op te lossen omdat het niet continue is (bijvoorbeeld a verspringt alleen per 50 C) en de grafisch voorstelling een 4 dimensionaal figuur is ofzo (dat dus niet kan bestaan?).

Ik kan redelijk programmeren maar deze wiskunde gaat me toch de pet iets te boven. Ik zoek dus een aanpak of methode. Misschien weet iemand het hier en anders als je andere bronnen weet is dat ook fijn (programmeer forums of programmeer theorie).
Het laat me enigszins denken aan een systeem zoals bij regeltechniek met terugkoppeling omdat de uitkomst de volgende uitkomst zal beinvloeden.

Flip
13-11-2007

Antwoord

TOEVOEGING ONDERAAN

Beste Flip,

Een intrigerende vraag. Maar nog niet helemaal duidelijk. Het updaten van A t/m G is op zich wel duidelijk. Maar wat bedoel je met Eu en Du. Ik zie nergens dat die variabelen een waarde krijgen. Het updaten van C is niet helemaal duidelijk. Wordt er nu altijd 1 bij opgeteld, soms ook 2 of zijn er nog meer mogelijkheden? En waarom schrijf je steeds E=E-Eu. Wordt E dan iedere keer aangepast? Zou je tenslotte ook wat over de achtergrond van het probleem willen vertellen. Het zijn erg ingewikkelde formules. Maar, waar dienen ze voor?

Wel alvast een paar opmerkingen:
* Een aantal variabelen verandert redelijk triviaal. Het lijkt mij bijvoorbeeld dat E = 100+4t (als je tenminste bedoelt dat E bij iedere tijdstap geupdate wordt).
* Ook C en A horen natuurlijk bij elkaar. Overigens wordt A nul zodra je C update. Is dat de bedoeling?

Groet. Oscar.

=================== ideetje ========================

wat vind je van deze?

Eerst B laten groeien tot zijn maximum. Dat kost (500000/1000)/4=13 beurten.
Dan F laten groeien tot zijn maximum. Dat duurt een stuk langer. ((15-5)*200/4=500 beurten).
Nu kun je C maximaal laten groeien. B.v. eens in de 6 beurten Du=300000, Eu=10. C groeit dan met 3 (dus 1/2 per beurt.) E groeit dan nog met 4-10/6=2,67 per beurt.
A*E=C*E/50=(0,5*t)*(2,67*t)=0,0267*t^2. Na ongeveer 800 beurten ben je dan bij de 10000. In totaal heb je 13+500+800=1313 beurten nodig.
Omdat F zo langzaam groeit kun je overwegen C al te laten groeien als F nog niet maximaal is. Maar als de groei van C halveert heb je toch weer meer beurten nodig. Dus veel sneller zal het niet kunnen.
Toch even proberen. Laat F tot 10 groeien. Dat kost 250 beurten. Nu heb je voor de maximale groei van C Eu=15/6=2,5 per beurt nodig. C*E/50 is dan: (0,5*t)*(1,5*t)/50 = 0,015*t^2. Dan heb je ongeveer 1200 beurten nodig om op 10000 te komen. Dat schiet inderdaad niet op. Dus F toch maar eerst maximaal laten worden.
Kun jij het sneller?

os
14-11-2007


© 2001-2024 WisFaq
WisFaq - de digitale vraagbaak voor het wiskunde onderwijs - http://www.wisfaq.nl

#53025 - Lineair programmeren - Student hbo