2011-01-17 3 views
2

Ich versuche, eine große Menge von Testdaten automatisch zu generieren, und ich bin schwer zu verstehen, wie Sie eine Reihe von zufälligen Werte erforderlich generieren.Generieren Sie zufällige Zahlen innerhalb einzelner Bereiche, die zu einem Wert

Ich muss eine Reihe von Zufallswerten erstellen, die in verschiedenen Bereichen auftreten. Die Summe der resultierenden Werte muss abhängig vom Testfall über oder unter einem vorgegebenen Wert liegen.

Zum Beispiel

Value | Minimum value | Maximum Value 
A | 100 | 300 
B | 200 | 500 
C | 300 | 600 
D | 100 | 300 

Wenn die Summe der Werte, die größer als 800 wäre eine gültige Lösung sein muss

A = 200 
B = 400 
C = 500 
D = 100 

werden, wenn die Summe der Werte von weniger als 800 wäre eine gültige Lösung sein muss be

A = 100 
B = 200 
C = 300 
D = 100 

Kann dieses Problem nur mit einer Optimierungsfunktion gelöst werden? Gibt es eine andere Möglichkeit, die Werte von ABCD zu berechnen?

Ich bin auf der Suche nach diesem Problem mit SQL zu lösen, wäre aber auch interessiert, einen Pseudo-Code-Ansatz zu hören.

Antwort

2

Versuchen Sie es erneut, bis Sie das gewünschte Ergebnis erhalten.

declare @T table (Value char(1), MinValue int, MaxValue int) 
insert into @T values('A', 100, 300) 
insert into @T values('B', 200, 500) 
insert into @T values('C', 300, 600) 
insert into @T values('D', 100, 300) 

declare @R table (Value char(1), Rnd int) 

declare @Sum int 

while 0=0 
begin 
    delete @R 
    insert into @R 
    select Value, round(((MaxValue - MinValue -1) * rand() + MinValue), 0) as Rnd 
     from @T 

    select @Sum = sum(Rnd) from @R 
    if @Sum > 800 
     break 
end 

select *, @Sum 
from @R 
+0

+1 Zumindest diese Lösung wird beendet. –

+0

Nun ... Sie müssen vorsichtig sein, wenn Sie den Wert zum Vergleichen auswählen. Es könnte gut sein, vorher einige Tests mit MinValue oder MaxValue durchzuführen. –

0

Generieren von Zufallszahlen 4, A, B, C, D.

Sum sie, E =

Skala A, B, C, D, die durch E/gewünschten Gesamt.

+0

Ich denke, Sie insgesamt/E gemeint, aber das wird immer noch nicht funktionieren, wie Skalierung den Wert von ABCD unter oder über die Min/Max-Werte setzen kann. Zum Beispiel würde A = 300, B = 400, C = 600, D = 100 mit einem Ziel von 700 zu D = 50 führen, was weniger ist als das Minimum von 100. – niallsco

Verwandte Themen