Pagina 1 van 1

Programmeer oplossing voor 3 zaken die mogelijk een relatie hebben

Geplaatst: 03 mar 2019, 12:15
door ElAntonio
Drie koersen
a)
b)
c)

Als ik stel dat 1 van deze waarden verdacht is.
Hoe ziet mijn programmeer instructie er dan uit als de uitkomst moet zijn 'de verdachte waarde zou de waarde 99Y moeten hebben'
De E,G en U hoeven niet altijd een oplossingsmogelijkheid te bieden (ik kan ook , , aangeboden krijgen)
Ik kan natuurlijk brute force :twisted: alles gaan zitten uitrekenen, maar er moet m.i. een elegantere :D :idea: oplossing zijn.

met programmeerinstructie bedoel ik bijvoorbeeld C#, C++, Algol, Java, VB

Re: Programmeer oplossing voor 3 zaken die mogelijk een relatie hebben

Geplaatst: 03 mar 2019, 14:53
door arie
Wat bedoel je met een verdachte waarde ?

In je voorbeeld:

a) E = 1.3 U
b) E = 0.8 G
c) G = 1.6 U

Uit a) en b) volgt: G = 1.3/0.8 = 1.625 U [vergelijkbaar met c)]
Uit a) en c) volgt: E = 1.3/1.6 = 0.8125 G [vergelijkbaar met b)]
Uit b) en c) volgt: E = 0.8*1.6 = 1.28 U [vergelijkbaar met a)]

Welke waarde is hier verdacht?

Re: Programmeer oplossing voor 3 zaken die mogelijk een relatie hebben

Geplaatst: 05 mar 2019, 10:14
door ElAntonio
gewoon een van de waarden waarvan 'men' denkt die zou wel eens niet kunnen kloppen.
het tot stand komen van de a, b en c vergelijkingen heeft een indicatie gegeven dat 1 van de waarden misschien wat minder vast is dan uit de vergelijking blijkt.

a) E = 1.30 U
b) E = 0.80 G
c) G = 1.60 U

dus E=0.80*1.60U => E=1.28U (van b&c)

Nu zijn er twee waarden voor dezelfde eenheid. (a) E=1.30U en (b&c) E=1.28U en dat is niet juist.
Wat ik (xonder brute force) wil weten is:
Wat is het E 'verschil' (1.30U-1.28U)=0.02U;
Wat is het G 'verschil' ....
Wat is het U 'verschil' ....
Daarna kan ik de minst verdachte waarde aanwijzen als basis en zodoende de uitkomst bepalen op 0.02U of -0.02U.

Re: Programmeer oplossing voor 3 zaken die mogelijk een relatie hebben

Geplaatst: 07 mar 2019, 06:53
door arie
Afbeelding

Als alle koersen gegeven worden in de vorm
\(X = a \cdot Y\)
dan kan je ze weergeven in een gewogen gerichte graaf.
In bovenstaand plaatje heb ik dat gedaan voor jouw voorbeeld.

Merk op: voor elke pijl van Y naar X voor
\(X = a \cdot Y\)
is er ook een pijl terug voor
\(Y = \frac{1}{a} \cdot X\)
(in het plaatje de rode getallen).

De padlengte in deze graaf is het product van de gewichten van alle pijlen in dat pad:
Lengte(UE) = 1.3
Lengte(UGE) = 1.6 * 0.8 = 1.28

In elke component (in dit voorbeeld is er 1 component: alle knopen zijn met elkaar verbonden) van je graaf kan je dan gaan zoeken naar het kortste en het langste pad van X naar Y.
Hiervoor bestaan een groot aantal standaard algoritmes, zie bijvoorbeeld deze 3 sites:
https://en.wikipedia.org/wiki/Path_(graph_theory)
https://en.wikipedia.org/wiki/Shortest_ ... cted_graph
https://en.wikipedia.org/wiki/Longest_path_problem

Voor het kortste pad zal je cycles moeten zien te vermijden:
n keer een cycle met lengte \(0.8\) doorlopen geeft een factor \(0.8^n\) in je pad, en dat gaat naar nul als n naar oneindig gaat.

Voor het langste pad zal je naar brute kracht moeten: dit probleem is NP-compleet.
Maar mogelijk wil je slechts de lengtes van paden met een beperkt aantal pijlen onderzoeken.
Bijvoorbeeld:
Als je het directe pad XY vergelijkt met het pad XABCDEFGY, dan kan een verdachte (zeg te hoge) waarde van FG de waarde van XY ook verdacht maken. Als in dit geval ook nog andere pijlen (bv. AB en BC) iets te hoog zijn, dan wordt XY zelfs verdachter dan FG.
Als je het aantal pijlen per pad beperkt houdt, zal een brute kracht oplossing waarschijnlijk goed haalbaar zijn.