systeem van formules

Status
Niet open voor verdere reacties.

flip101

Nieuwe gebruiker
Lid geworden
6 nov 2007
Berichten
1
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).

P.S. Ik zet het in het PHP forum neer omdat ik het in PHP wil gaan maken.
 
Als ik het goed begrijp is alles tijds afhankelijk. De "veranderingsafhankelijken" worden neem ik continue nog gebruik in de berekening met hun oude waarde?. Zo ja, dan is dit voor PHP niet relevant. Zo niet (dus alleen bij verandering meerekening), dan kan dat via onderstaande if/else opgelost worden.

Ik neem aan dat bij tijdsafhankelijk je niet de werkelijke tijd gebruik, maar gewoon rekenkundig tijd (dus geen reealtime simualtie, maar gewoon de berekening maken als een functie tot de tijd).


Onder bovenstaande voorwaarde zou je volgende kunnen gebruiken voor de tijd:

PHP:
<?php

$blijfrekenen=1; // Als waarde true is (ofwel 1) dan doorblijven gaan
$tstart=0; // Je kunt dus op een latere tijd starten
$t=$tstart; // Voor in de berekening
$tijdstap=1; // Je rekenstap is 1 seconde per keer

While($blijfrekenen){

// Dit zet klaar op true als waarde van G gehaald is, en stopt het script)
if($G>9999){ // Groter dan 9999, ofwel 10.000 en meer)
  $blijfrekenen=0; // False, ofwel stoppen met rekenen
}

// Hier al je rekenformules en regels plaatsen

echo "Als je voor elke waarde van $t iets wilt weergeven, plaats het hier <BR>\n";

$t=$t+$rekenstap; // 1 seconde erbijop tellen
} // einde while

echo "Hier alle waarden die je op je eind resultaat wilt laten zien echo-en";
echo "berekening duurde van tijd = ". $tstart." tot tijd = ". $t .".<br>\n";


Zoiets als dit zou je dan moeten gebruiken. Ik begrijp niet precies wat je wilt berekeken, maar bovenstaande kan over het algemeen voor elke ( F(t) = iets ) berekeing gebruik worden.
 
Laatst bewerkt:
Ik heb geprobeerd om er chocola van te maken.. Maar ik snap niet alles.

'Elke keer dat t gebeurd'?

Wat houdt 'gebeurtenis t' precies in? Dat er een seconde voorbij gaat? (Of andere tijdseenheid?)

Wat betekenen Eu, Du en dergelijke variabelen precies?

Wat zijn precies die 'zelfgekozen momenten'? Zijn dat bepaalde waardes van t die je zelf uitkiest ofzo?

"Nu wil ik graag G op 10000 brengen in zo min mogelijk tijd."

$G = 10000;

Ok, dat is wel erg flauw, maar ik snap gewoon het probleem niet zo goed.
 
Ik heb geprobeerd om er chocola van te maken.. Maar ik snap niet alles.

'Elke keer dat t gebeurd'?

Wat houdt 'gebeurtenis t' precies in? Dat er een seconde voorbij gaat? (Of andere tijdseenheid?)

Wat betekenen Eu, Du en dergelijke variabelen precies?

Wat zijn precies die 'zelfgekozen momenten'? Zijn dat bepaalde waardes van t die je zelf uitkiest ofzo?

"Nu wil ik graag G op 10000 brengen in zo min mogelijk tijd."

$G = 10000;

Ok, dat is wel erg flauw, maar ik snap gewoon het probleem niet zo goed.

Aangezien hij het zo snel mogelijk wil hebben, moet er een functie TIJD in. Wat de tijd voorsteld, is afhankelijk van de andere waarden en eenheden. Je kunt het stappen noemen, seconden, ms, uren, dagen, eeuwen... wat je zelf maar wilt.

Ik denk dat dit een wiskundige berekening is, waarbij het moet bereken voor welke waarden hij dit zo hoog mogelijk krijgt. Door de rekenaar te maken, kan hij zelf klooien met de eenheden tot hij een zo laag mogelijke T waarde krijgt.

De laagste waarde van T is de snelste, ongeacht de gebruikte eenheid.

i.p.v. G=10000 is er gekozen voor G>9999, omdat als G10001 is, heb je het doel ook bereikt, maar zou de berekening niet stoppen en oneindig door gaan.

m.v.g,
Mark
 
i.p.v. G=10000 is er gekozen voor G>9999, omdat als G10001 is, heb je het doel ook bereikt, maar zou de berekening niet stoppen en oneindig door gaan.

Ja... Nogal wiedes. Ik reageerde ook niet op jou, of jou stukje code. :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan