Labor Camps Dynamics

G

Guest

Guest

(A)

A one turn run of 5000 bases with 100 LCs and troop and 100k prisoner let
4020 of them work. So one can take 80% as the working rate of labor camps.
So if ever the rate was 60% as it was told to me than we have an improvement
here. Not good.

(B)

The former could still be stand. But what now follows is not to understand.

The death rate seems to be r_death=Min[LC/20000;P/2000000]

The implication is that the LCs make more money than ever before. Of course
at 1M prisoner you have 50% death rate but than it shrinks very fast - so
fast that the output if infinte.

Before the output was binded to the output of a geometrical sum, i.e.
1+0.8+0.8^2+... what is even at infinity equal to 1/(1-0.8)=5

Now the prisoner population shrinks at low level so slow that the output sum
connected with has no limit.

It goes like 2,000,00/[2,000,000/Prisoner+n+something like log(n+1) ] (the
output/turn n=turn number, n=0 actual turn, n=1 next turn,...)

And then over 5 or ten turns the put put of 10 100k camps is 2-3 times
bigger than for a 1M world. That means that with enough willing to
micromanagement player can bring the output to almost any level they want.
At least to a level much greater than before.

So this should be discussed in my honest opinion.

GFM GToeroe

G

Guest

Guest

(A)
80%? Wow. My own labor mines seem to work MUCH less efficient. Bad
streak of luck, or a difference in camps and mines.

(B)
"The death rate seems to be r_death=Min[LC/20000;P/2000000]"

The death rate used to be 0.02% per filled camp (maxed at 20%), which
is four times the amount in your formula. That is confirmed by Lokis
post in another thread, who has seen only a quarter of the expected
losses. Wow.

So the new labor camp rule seems to be: four times less losses, but no
max cap anymore at 20%.
If you have less than 400k prisoners at a base, you fare way better
than before, if you have more than 400k prisoners in a single base, you
are worse off than before. Overall this makes prisoner spreading (and
labor camps in generell) a lot more effective!

Maybe too effective. Uh oh. Well, we'll see. I won't argue too much
about it before I've tested it a few turns, and verified the results
above.

G

Guest

Guest

Oh, please feel free to do any scripting work you want to .

The workings of labor camps/minesb in previous hosts were quite known,
and I scripted games to verify them. So I am rather sure of my
knowledge. Here it is:

Death rate for prisoners was 0.02% per filled camp, maxing at 20%.
Meaning 10k camps didn't cause more losses than 1k camps (both 20%).
100 camps would cause only a deathrate of 2%. Losses were applied to
all prisoners in the base, not only the working ones (so it was always
a bad idea to have more prisoners inside a base than space in camps).
If you had a surplus of camps, only the camps actually filled with
prisoners would cause the deathrate.

bases, it was just a question of micromanagment. With a deathrate of
20% you could use 1M prisoners in a single base. To reduce the
deathrate down to 5% (at the same number of prisoners) you'd need 40
bases with 25k prisoners each. Lot of work! And you need lots of save
planets.

Now (if our assumption about the made changes is correct) a base with
1M prisoners will have a deathrate of 50%. To reduce it to 5% you'd
need 10 bases with 100k prisoners each. Much less micromanagment than
before! 10 bases is do-able, and a 5% deathrate is quite low.

The success rate of labor camps was always a bit unknown. Tim stated it
as 60% once. But quite often people said they were 'hit to hard'.
Easily explained by statistical fluctuations. But there's also the
possibility that there's something wrong with Tims random values,
causing real unlikely streaks of good or bad luck. I don't know. While
we are at it: did you program to test lots of bases for 1 turn, or a
few bases over lots of turns? This might be big difference for
statistics if the random number creation is broken. But honestly, this
is just a rumor, and I don't really believe in it (I don't totally rule
it out either though .

G

Guest

Guest

SUB EcoLaborcamp(count AS LONG)
'// Assertions:
DIM dA AS DOUBLE
DIM dB AS DOUBLE
DIM v AS LONG
DIM i AS LONG
DIM rDeath As Single
DIM vCount As Long
Dim rOdds As Single
Dim vP As Long
Dim vBlood As Long

FOR i = 1 TO 30
IF i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
IF raceA(i).racenum <> %raceCyborg THEN
dB = meBaseT.pColonist(i)
dA = dA + dB
End If
END IF
NEXT i
v = dA / 100
vCount = count
If vCount > v Then vCount = v
dA = 0
vBlood = 0

FOR i = 1 TO 30
If i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
If raceA(i).racenum <> %raceCyborg THEN
If raceA(i).racenum <> %raceRobot THEN
dB = meBaseT.pColonist(i)
rDeath = 1 - (CSng(vCount / 100) * .005)
If raceA(meBaseT.pNum).racenum = %raceEmpire THEN
rDeath = rDeath - .1
End If
If rDeath < .5 Then rDeath = .5
If rDeath > 1 Then rDeath = 1
meBaseT.pColonist(i) = meBaseT.pColonist(i) * rDeath
dA = dA + dB
dB = meBaseT.pCrew(i)
meBaseT.pCrew(i) = meBaseT.pCrew(i) * rDeath
dA = dA + dB
dB = meBaseT.pGuard(i)
meBaseT.pGuard(i) = meBaseT.pGuard(i) * rDeath
dA = dA + dB
dB = meBaseT.pTroop(i)
meBaseT.pTroop(i) = meBaseT.pTroop(i) * rDeath
dA = dA + dB
vP = (meBaseT.pNum - 1) * 30 + i
vBlood = vBlood + g_Blood(vP)
Else
If meBaseT.pColonist(i) > 0 Then
LogOut meBaseT.id, "Robot prisoners refuse to work in
the labor camp, they are just standing around humming."
End If
End If
Else
If meBaseT.pColonist(i) > 0 Then
LogOut meBaseT.id, "Cyborg prisoners refuse to work in
the labor camp, they are just standing around pouting."
End If
End If
END IF
NEXT i
IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
dA = dA * 4
End If

dA = dA / 100

If vBlood > 100 Then
rOdds = .15
Elseif vBlood > 50 Then
rOdds = .35
Elseif vBlood > 10 Then
rOdds = .45
Elseif vBlood > 5 Then
rOdds = .55
Else
rOdds = .80
End If

IF dA > 0 THEN
If Rnd > rOdds Then
If Rnd > .5 Or dA < 20 Then
LogOut mebaseT.id, "Labor camp riots, nothing produced."
ElseIf Rnd > .5 Then
LogOut meBaseT.id, "Prisoners explode supply storage. (10%
supplies lost)"
mebaseT.eleS = mebaseT.eleS * .9
ElseIf Rnd > .5 Then
LogOut meBaseT.id, "Prisoner escape! Colonists frightened!
Colonists killed! (-5 happiness) (2% colonists killed)"
mebaseT.colonistHappy = mebaseT.colonistHappy - Rnd * 5
meBaseT.colonistOne = mebaseT.colonistOne * .98
Else
LogOut meBaseT.id, "Labor camp workers release a nano
virus, money lost! (10mc per camp)"
mebaseT.cash = mebaseT.cash - vCount * 10
If mebaseT.cash < 0 then mebaseT.cash = 0
End If
Else
IF dA > %bill THEN dA = %bill
v = vCount
IF v > dA THEN v = dA
IF meBaseT.eleS < %bill THEN
meBaseT.eleS = meBaseT.eleS + v
meBaseT.cash = meBaseT.cash + (v * 10)
IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
meBaseT.cash = meBaseT.cash + (v * 30)
End If
END IF
End If
END IF
END SUB

G

Guest

Guest

I'm thinking that the colonist death rate on prisoner escape should be
tied to number of prisoners in the camps.

G

Guest

Guest

That is current code in the current host.

G

Guest

Guest

That is current code in the current host.

G

Guest

Guest

"Lord Owl" <lord.owl@gmx.de> schrieb im Newsbeitrag
> (A)
> 80%? Wow. My own labor mines seem to work MUCH less efficient. Bad
> streak of luck, or a difference in camps and mines.
That's what I see. I will see if mines work different.

>
> (B)
> "The death rate seems to be r_death=Min[LC/20000;P/2000000]"
>
> The death rate used to be 0.02% per filled camp (maxed at 20%), which
> is four times the amount in your formula. That is confirmed by Lokis
> post in another thread, who has seen only a quarter of the expected
> losses. Wow.

I thought it was constantly 20% before. Then I have to recalculate the
compare.

>
> Maybe too effective. Uh oh. Well, we'll see. I won't argue too much
> about it before I've tested it a few turns, and verified the results
> above.

Well, can you repeat how it was exactly before for me? But only if it is
hard knowledge. Otherwise I sim it with an old host.

Then I can an do an detailled compare. Or will you do the work (I don't mind
;-) )?

But I guess the 80% rate plus the fast shrinking of the death rate will
indeed lead to a greater output than before.

GFM GToeroe

G

Guest

Guest

"Lord Owl" <lord.owl@gmx.de> schrieb im Newsbeitrag
> Oh, please feel free to do any scripting work you want to .
Clear...

> Now (if our assumption about the made changes is correct) a base with
> 1M prisoners will have a deathrate of 50%. To reduce it to 5% you'd
> need 10 bases with 100k prisoners each. Much less micromanagment than
> before! 10 bases is do-able, and a 5% deathrate is quite low.
Yes, and micromanagement-fans can boost it...

>
> we are at it: did you program to test lots of bases for 1 turn, or a
5000 bases in one turn.

> few bases over lots of turns? This might be big difference for
> statistics if the random number creation is broken. But honestly, this
> is just a rumor, and I don't really believe in it (I don't totally rule
So do I.

GFM GToeroe

G

Guest

Guest

This is fresh code, right? Not yet built in a published host, right?

GFM GToeroe

"cocomax" <cocomax@aol.com> schrieb im Newsbeitrag
> SUB EcoLaborcamp(count AS LONG)
> '// Assertions:
> DIM dA AS DOUBLE
> DIM dB AS DOUBLE
> DIM v AS LONG
> DIM i AS LONG
> DIM rDeath As Single
> DIM vCount As Long
> Dim rOdds As Single
> Dim vP As Long
> Dim vBlood As Long
>
> FOR i = 1 TO 30
> IF i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
> IF raceA(i).racenum <> %raceCyborg THEN
> dB = meBaseT.pColonist(i)
> dA = dA + dB
> End If
> END IF
> NEXT i
> v = dA / 100
> vCount = count
> If vCount > v Then vCount = v
> dA = 0
> vBlood = 0
>
> FOR i = 1 TO 30
> If i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
> If raceA(i).racenum <> %raceCyborg THEN
> If raceA(i).racenum <> %raceRobot THEN
> dB = meBaseT.pColonist(i)
> rDeath = 1 - (CSng(vCount / 100) * .005)
> If raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> rDeath = rDeath - .1
> End If
> If rDeath < .5 Then rDeath = .5
> If rDeath > 1 Then rDeath = 1
> meBaseT.pColonist(i) = meBaseT.pColonist(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pCrew(i)
> meBaseT.pCrew(i) = meBaseT.pCrew(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pGuard(i)
> meBaseT.pGuard(i) = meBaseT.pGuard(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pTroop(i)
> meBaseT.pTroop(i) = meBaseT.pTroop(i) * rDeath
> dA = dA + dB
> vP = (meBaseT.pNum - 1) * 30 + i
> vBlood = vBlood + g_Blood(vP)
> Else
> If meBaseT.pColonist(i) > 0 Then
> LogOut meBaseT.id, "Robot prisoners refuse to work in
> the labor camp, they are just standing around humming."
> End If
> End If
> Else
> If meBaseT.pColonist(i) > 0 Then
> LogOut meBaseT.id, "Cyborg prisoners refuse to work in
> the labor camp, they are just standing around pouting."
> End If
> End If
> END IF
> NEXT i
> IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> dA = dA * 4
> End If
>
> dA = dA / 100
>
> If vBlood > 100 Then
> rOdds = .15
> Elseif vBlood > 50 Then
> rOdds = .35
> Elseif vBlood > 10 Then
> rOdds = .45
> Elseif vBlood > 5 Then
> rOdds = .55
> Else
> rOdds = .80
> End If
>
> IF dA > 0 THEN
> If Rnd > rOdds Then
> If Rnd > .5 Or dA < 20 Then
> LogOut mebaseT.id, "Labor camp riots, nothing produced."
> ElseIf Rnd > .5 Then
> LogOut meBaseT.id, "Prisoners explode supply storage. (10%
> supplies lost)"
> mebaseT.eleS = mebaseT.eleS * .9
> ElseIf Rnd > .5 Then
> LogOut meBaseT.id, "Prisoner escape! Colonists frightened!
> Colonists killed! (-5 happiness) (2% colonists killed)"
> mebaseT.colonistHappy = mebaseT.colonistHappy - Rnd * 5
> meBaseT.colonistOne = mebaseT.colonistOne * .98
> Else
> LogOut meBaseT.id, "Labor camp workers release a nano
> virus, money lost! (10mc per camp)"
> mebaseT.cash = mebaseT.cash - vCount * 10
> If mebaseT.cash < 0 then mebaseT.cash = 0
> End If
> Else
> IF dA > %bill THEN dA = %bill
> v = vCount
> IF v > dA THEN v = dA
> IF meBaseT.eleS < %bill THEN
> meBaseT.eleS = meBaseT.eleS + v
> meBaseT.cash = meBaseT.cash + (v * 10)
> IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> meBaseT.cash = meBaseT.cash + (v * 30)
> End If
> END IF
> End If
> END IF
> END SUB
>

G

Guest

Guest

So crewmen, troops and guards only die if the see their lovely die. Then
their heart becomes so sad that they die, right?

So if I see it correct then it makes sense to seperate the weak colonist
from the other personnel. Then the other personnel never dies, right?

GFM GToeroe

"cocomax" <cocomax@aol.com> schrieb im Newsbeitrag
> SUB EcoLaborcamp(count AS LONG)
> '// Assertions:
> DIM dA AS DOUBLE
> DIM dB AS DOUBLE
> DIM v AS LONG
> DIM i AS LONG
> DIM rDeath As Single
> DIM vCount As Long
> Dim rOdds As Single
> Dim vP As Long
> Dim vBlood As Long
>
> FOR i = 1 TO 30
> IF i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
> IF raceA(i).racenum <> %raceCyborg THEN
> dB = meBaseT.pColonist(i)
> dA = dA + dB
> End If
> END IF
> NEXT i
> v = dA / 100
> vCount = count
> If vCount > v Then vCount = v
> dA = 0
> vBlood = 0
>
> FOR i = 1 TO 30
> If i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
> If raceA(i).racenum <> %raceCyborg THEN
> If raceA(i).racenum <> %raceRobot THEN
> dB = meBaseT.pColonist(i)
> rDeath = 1 - (CSng(vCount / 100) * .005)
> If raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> rDeath = rDeath - .1
> End If
> If rDeath < .5 Then rDeath = .5
> If rDeath > 1 Then rDeath = 1
> meBaseT.pColonist(i) = meBaseT.pColonist(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pCrew(i)
> meBaseT.pCrew(i) = meBaseT.pCrew(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pGuard(i)
> meBaseT.pGuard(i) = meBaseT.pGuard(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pTroop(i)
> meBaseT.pTroop(i) = meBaseT.pTroop(i) * rDeath
> dA = dA + dB
> vP = (meBaseT.pNum - 1) * 30 + i
> vBlood = vBlood + g_Blood(vP)
> Else
> If meBaseT.pColonist(i) > 0 Then
> LogOut meBaseT.id, "Robot prisoners refuse to work in
> the labor camp, they are just standing around humming."
> End If
> End If
> Else
> If meBaseT.pColonist(i) > 0 Then
> LogOut meBaseT.id, "Cyborg prisoners refuse to work in
> the labor camp, they are just standing around pouting."
> End If
> End If
> END IF
> NEXT i
> IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> dA = dA * 4
> End If
>
> dA = dA / 100
>
> If vBlood > 100 Then
> rOdds = .15
> Elseif vBlood > 50 Then
> rOdds = .35
> Elseif vBlood > 10 Then
> rOdds = .45
> Elseif vBlood > 5 Then
> rOdds = .55
> Else
> rOdds = .80
> End If
>
> IF dA > 0 THEN
> If Rnd > rOdds Then
> If Rnd > .5 Or dA < 20 Then
> LogOut mebaseT.id, "Labor camp riots, nothing produced."
> ElseIf Rnd > .5 Then
> LogOut meBaseT.id, "Prisoners explode supply storage. (10%
> supplies lost)"
> mebaseT.eleS = mebaseT.eleS * .9
> ElseIf Rnd > .5 Then
> LogOut meBaseT.id, "Prisoner escape! Colonists frightened!
> Colonists killed! (-5 happiness) (2% colonists killed)"
> mebaseT.colonistHappy = mebaseT.colonistHappy - Rnd * 5
> meBaseT.colonistOne = mebaseT.colonistOne * .98
> Else
> LogOut meBaseT.id, "Labor camp workers release a nano
> virus, money lost! (10mc per camp)"
> mebaseT.cash = mebaseT.cash - vCount * 10
> If mebaseT.cash < 0 then mebaseT.cash = 0
> End If
> Else
> IF dA > %bill THEN dA = %bill
> v = vCount
> IF v > dA THEN v = dA
> IF meBaseT.eleS < %bill THEN
> meBaseT.eleS = meBaseT.eleS + v
> meBaseT.cash = meBaseT.cash + (v * 10)
> IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> meBaseT.cash = meBaseT.cash + (v * 30)
> End If
> END IF
> End If
> END IF
> END SUB
>

G

Guest

Guest

So the rule of the death rate is confirmed.
If g_blood(vP) is low enough then they work 80% of the time.

BTW Tim: What is g_blood() and how is it generated?

GFM GToeroe

"cocomax" <cocomax@aol.com> schrieb im Newsbeitrag
> SUB EcoLaborcamp(count AS LONG)
> '// Assertions:
> DIM dA AS DOUBLE
> DIM dB AS DOUBLE
> DIM v AS LONG
> DIM i AS LONG
> DIM rDeath As Single
> DIM vCount As Long
> Dim rOdds As Single
> Dim vP As Long
> Dim vBlood As Long
>
> FOR i = 1 TO 30
> IF i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
> IF raceA(i).racenum <> %raceCyborg THEN
> dB = meBaseT.pColonist(i)
> dA = dA + dB
> End If
> END IF
> NEXT i
> v = dA / 100
> vCount = count
> If vCount > v Then vCount = v
> dA = 0
> vBlood = 0
>
> FOR i = 1 TO 30
> If i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
> If raceA(i).racenum <> %raceCyborg THEN
> If raceA(i).racenum <> %raceRobot THEN
> dB = meBaseT.pColonist(i)
> rDeath = 1 - (CSng(vCount / 100) * .005)
> If raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> rDeath = rDeath - .1
> End If
> If rDeath < .5 Then rDeath = .5
> If rDeath > 1 Then rDeath = 1
> meBaseT.pColonist(i) = meBaseT.pColonist(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pCrew(i)
> meBaseT.pCrew(i) = meBaseT.pCrew(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pGuard(i)
> meBaseT.pGuard(i) = meBaseT.pGuard(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pTroop(i)
> meBaseT.pTroop(i) = meBaseT.pTroop(i) * rDeath
> dA = dA + dB
> vP = (meBaseT.pNum - 1) * 30 + i
> vBlood = vBlood + g_Blood(vP)
> Else
> If meBaseT.pColonist(i) > 0 Then
> LogOut meBaseT.id, "Robot prisoners refuse to work in
> the labor camp, they are just standing around humming."
> End If
> End If
> Else
> If meBaseT.pColonist(i) > 0 Then
> LogOut meBaseT.id, "Cyborg prisoners refuse to work in
> the labor camp, they are just standing around pouting."
> End If
> End If
> END IF
> NEXT i
> IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> dA = dA * 4
> End If
>
> dA = dA / 100
>
> If vBlood > 100 Then
> rOdds = .15
> Elseif vBlood > 50 Then
> rOdds = .35
> Elseif vBlood > 10 Then
> rOdds = .45
> Elseif vBlood > 5 Then
> rOdds = .55
> Else
> rOdds = .80
> End If
>
> IF dA > 0 THEN
> If Rnd > rOdds Then
> If Rnd > .5 Or dA < 20 Then
> LogOut mebaseT.id, "Labor camp riots, nothing produced."
> ElseIf Rnd > .5 Then
> LogOut meBaseT.id, "Prisoners explode supply storage. (10%
> supplies lost)"
> mebaseT.eleS = mebaseT.eleS * .9
> ElseIf Rnd > .5 Then
> LogOut meBaseT.id, "Prisoner escape! Colonists frightened!
> Colonists killed! (-5 happiness) (2% colonists killed)"
> mebaseT.colonistHappy = mebaseT.colonistHappy - Rnd * 5
> meBaseT.colonistOne = mebaseT.colonistOne * .98
> Else
> LogOut meBaseT.id, "Labor camp workers release a nano
> virus, money lost! (10mc per camp)"
> mebaseT.cash = mebaseT.cash - vCount * 10
> If mebaseT.cash < 0 then mebaseT.cash = 0
> End If
> Else
> IF dA > %bill THEN dA = %bill
> v = vCount
> IF v > dA THEN v = dA
> IF meBaseT.eleS < %bill THEN
> meBaseT.eleS = meBaseT.eleS + v
> meBaseT.cash = meBaseT.cash + (v * 10)
> IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> meBaseT.cash = meBaseT.cash + (v * 30)
> End If
> END IF
> End If
> END IF
> END SUB
>

G

Guest

Guest

It looks like I have some errors in my logic. . . with low g_blood the
camp should FAIL 80% of the time. The code should be changed to this:

SUB EcoLaborcamp(count AS LONG)
'// Assertions:
DIM dA AS DOUBLE
DIM dB AS DOUBLE
DIM v AS LONG
DIM i AS LONG
DIM rDeath As Single
DIM vCount As Long
Dim rOdds As Single
Dim vP As Long
Dim vBlood As Long

FOR i = 1 TO 30
IF i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
IF raceA(i).racenum <> %raceCyborg THEN
dB = meBaseT.pColonist(i) + meBaseT.pCrew(i) +
meBaseT.pTroop(i) + meBaseT.pGuard(i)
dA = dA + dB
End If
END IF
NEXT i
v = dA / 100
vCount = count
If vCount > v Then vCount = v
dA = 0
vBlood = 0

FOR i = 1 TO 30
If i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
If raceA(i).racenum <> %raceCyborg THEN
If raceA(i).racenum <> %raceRobot THEN
dB = meBaseT.pColonist(i)
rDeath = 1 - (CSng(vCount / 100) * .005)
If raceA(meBaseT.pNum).racenum = %raceEmpire THEN
rDeath = rDeath - .1
End If
If rDeath < .5 Then rDeath = .5
If rDeath > 1 Then rDeath = 1
meBaseT.pColonist(i) = meBaseT.pColonist(i) * rDeath
dA = dA + dB
dB = meBaseT.pCrew(i)
meBaseT.pCrew(i) = meBaseT.pCrew(i) * rDeath
dA = dA + dB
dB = meBaseT.pGuard(i)
meBaseT.pGuard(i) = meBaseT.pGuard(i) * rDeath
dA = dA + dB
dB = meBaseT.pTroop(i)
meBaseT.pTroop(i) = meBaseT.pTroop(i) * rDeath
dA = dA + dB
vP = (meBaseT.pNum - 1) * 30 + i
vBlood = vBlood + g_Blood(vP)
Else
If meBaseT.pColonist(i) > 0 Then
LogOut meBaseT.id, "Robot prisoners refuse to work in
the labor camp, they are just standing around humming."
End If
End If
Else
If meBaseT.pColonist(i) > 0 Then
LogOut meBaseT.id, "Cyborg prisoners refuse to work in
the labor camp, they are just standing around pouting."
End If
End If
END IF
NEXT i
IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
dA = dA * 4
End If

dA = dA / 100

If vBlood > 100 Then
rOdds = .15
Elseif vBlood > 50 Then
rOdds = .35
Elseif vBlood > 10 Then
rOdds = .45
Elseif vBlood > 5 Then
rOdds = .55
Else
rOdds = .80
End If

IF dA > 0 THEN
If Rnd < rOdds Then
If Rnd > .5 Or dA < 20 Then
LogOut mebaseT.id, "Labor camp riots, nothing produced."
ElseIf Rnd > .5 Then
LogOut meBaseT.id, "Prisoners explode supply storage. (10%
supplies lost)"
mebaseT.eleS = mebaseT.eleS * .9
ElseIf Rnd > .5 Then
LogOut meBaseT.id, "Prisoner escape! Colonists frightened!
Colonists killed! (-5 happiness) (2% colonists killed)"
mebaseT.colonistHappy = mebaseT.colonistHappy - Rnd * 5
meBaseT.colonistOne = mebaseT.colonistOne * .98
Else
LogOut meBaseT.id, "Labor camp workers release a nano
virus, money lost! (10mc per camp)"
mebaseT.cash = mebaseT.cash - vCount * 10
If mebaseT.cash < 0 then mebaseT.cash = 0
End If
Else
IF dA > %bill THEN dA = %bill
v = vCount
IF v > dA THEN v = dA
IF meBaseT.eleS < %bill THEN
meBaseT.eleS = meBaseT.eleS + v
meBaseT.cash = meBaseT.cash + (v * 10)
IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
meBaseT.cash = meBaseT.cash + (v * 30)
End If
END IF
End If
END IF
END SUB

G

Guest

Guest

And if you now could tell what this g_blood is and what the rules are for
its changes then we all would sleep better...

"cocomax" <cocomax@aol.com> schrieb im Newsbeitrag
> It looks like I have some errors in my logic. . . with low g_blood the
> camp should FAIL 80% of the time. The code should be changed to this:
>
> SUB EcoLaborcamp(count AS LONG)
> '// Assertions:
> DIM dA AS DOUBLE
> DIM dB AS DOUBLE
> DIM v AS LONG
> DIM i AS LONG
> DIM rDeath As Single
> DIM vCount As Long
> Dim rOdds As Single
> Dim vP As Long
> Dim vBlood As Long
>
> FOR i = 1 TO 30
> IF i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
> IF raceA(i).racenum <> %raceCyborg THEN
> dB = meBaseT.pColonist(i) + meBaseT.pCrew(i) +
> meBaseT.pTroop(i) + meBaseT.pGuard(i)
> dA = dA + dB
> End If
> END IF
> NEXT i
> v = dA / 100
> vCount = count
> If vCount > v Then vCount = v
> dA = 0
> vBlood = 0
>
> FOR i = 1 TO 30
> If i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
> If raceA(i).racenum <> %raceCyborg THEN
> If raceA(i).racenum <> %raceRobot THEN
> dB = meBaseT.pColonist(i)
> rDeath = 1 - (CSng(vCount / 100) * .005)
> If raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> rDeath = rDeath - .1
> End If
> If rDeath < .5 Then rDeath = .5
> If rDeath > 1 Then rDeath = 1
> meBaseT.pColonist(i) = meBaseT.pColonist(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pCrew(i)
> meBaseT.pCrew(i) = meBaseT.pCrew(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pGuard(i)
> meBaseT.pGuard(i) = meBaseT.pGuard(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pTroop(i)
> meBaseT.pTroop(i) = meBaseT.pTroop(i) * rDeath
> dA = dA + dB
> vP = (meBaseT.pNum - 1) * 30 + i
> vBlood = vBlood + g_Blood(vP)
> Else
> If meBaseT.pColonist(i) > 0 Then
> LogOut meBaseT.id, "Robot prisoners refuse to work in
> the labor camp, they are just standing around humming."
> End If
> End If
> Else
> If meBaseT.pColonist(i) > 0 Then
> LogOut meBaseT.id, "Cyborg prisoners refuse to work in
> the labor camp, they are just standing around pouting."
> End If
> End If
> END IF
> NEXT i
> IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> dA = dA * 4
> End If
>
> dA = dA / 100
>
> If vBlood > 100 Then
> rOdds = .15
> Elseif vBlood > 50 Then
> rOdds = .35
> Elseif vBlood > 10 Then
> rOdds = .45
> Elseif vBlood > 5 Then
> rOdds = .55
> Else
> rOdds = .80
> End If
>
> IF dA > 0 THEN
> If Rnd < rOdds Then
> If Rnd > .5 Or dA < 20 Then
> LogOut mebaseT.id, "Labor camp riots, nothing produced."
> ElseIf Rnd > .5 Then
> LogOut meBaseT.id, "Prisoners explode supply storage. (10%
> supplies lost)"
> mebaseT.eleS = mebaseT.eleS * .9
> ElseIf Rnd > .5 Then
> LogOut meBaseT.id, "Prisoner escape! Colonists frightened!
> Colonists killed! (-5 happiness) (2% colonists killed)"
> mebaseT.colonistHappy = mebaseT.colonistHappy - Rnd * 5
> meBaseT.colonistOne = mebaseT.colonistOne * .98
> Else
> LogOut meBaseT.id, "Labor camp workers release a nano
> virus, money lost! (10mc per camp)"
> mebaseT.cash = mebaseT.cash - vCount * 10
> If mebaseT.cash < 0 then mebaseT.cash = 0
> End If
> Else
> IF dA > %bill THEN dA = %bill
> v = vCount
> IF v > dA THEN v = dA
> IF meBaseT.eleS < %bill THEN
> meBaseT.eleS = meBaseT.eleS + v
> meBaseT.cash = meBaseT.cash + (v * 10)
> IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> meBaseT.cash = meBaseT.cash + (v * 30)
> End If
> END IF
> End If
> END IF
> END SUB
>

G

Guest

Guest

>And if one seperates the colonists from the other personnel in a
different
>base then the other personnel never dies?

Not in the current host. . .

FOR i = 1 TO 30
IF i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
IF raceA(i).racenum <> %raceCyborg THEN
dB = meBaseT.pColonist(i) + meBaseT.pCrew(i) +
meBaseT.pTroop(i) + meBaseT.pGuard(i)
dA = dA + dB
End If
END IF
NEXT i
v = dA / 100
vCount = count
If vCount > v Then vCount = v
dA = 0
vBlood = 0

FOR i = 1 TO 30
If i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
If raceA(i).racenum <> %raceCyborg THEN
If raceA(i).racenum <> %raceRobot THEN
dB = meBaseT.pColonist(i)
rDeath = 1 - (CSng(vCount / 100) * .005)

** and the Empire gets an extra 10% death rate all the time. . .

If raceA(meBaseT.pNum).racenum = %raceEmpire THEN
rDeath = rDeath - .1
End If
If rDeath < .5 Then rDeath = .5
If rDeath > 1 Then rDeath = 1
meBaseT.pColonist(i) = meBaseT.pColonist(i) * rDeath

G

Guest

Guest

....
dB = meBaseT.pColonist(i)
dA=dA+dB
....
dB = meBaseT.pCrew(i)
dA=dA+dB
....
dB = meBaseT.pGuard(i)
dA=dA+dB
....
dB = meBaseT.pTroop(i)
dA=dA+dB
....
IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
dA = dA * 4
....
v = vCount
IF v > dA THEN v = dA
....
meBaseT.cash = meBaseT.cash + (v * 10)
IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
meBaseT.cash = meBaseT.cash + (v * 30)
....
So if an EE have four times the camps he needs he gets 16 times the cash?
And if one seperates the colonists from the other personnel in a different
base then the other personnel never dies?

GFM GToeroe

"cocomax" <cocomax@aol.com> schrieb im Newsbeitrag
> It looks like I have some errors in my logic. . . with low g_blood the
> camp should FAIL 80% of the time. The code should be changed to this:
>
> SUB EcoLaborcamp(count AS LONG)
> '// Assertions:
> DIM dA AS DOUBLE
> DIM dB AS DOUBLE
> DIM v AS LONG
> DIM i AS LONG
> DIM rDeath As Single
> DIM vCount As Long
> Dim rOdds As Single
> Dim vP As Long
> Dim vBlood As Long
>
> FOR i = 1 TO 30
> IF i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
> IF raceA(i).racenum <> %raceCyborg THEN
> dB = meBaseT.pColonist(i) + meBaseT.pCrew(i) +
> meBaseT.pTroop(i) + meBaseT.pGuard(i)
> dA = dA + dB
> End If
> END IF
> NEXT i
> v = dA / 100
> vCount = count
> If vCount > v Then vCount = v
> dA = 0
> vBlood = 0
>
> FOR i = 1 TO 30
> If i <> meBaseT.pNum And meBaseT.pNum > 0 THEN
> If raceA(i).racenum <> %raceCyborg THEN
> If raceA(i).racenum <> %raceRobot THEN
> dB = meBaseT.pColonist(i)
> rDeath = 1 - (CSng(vCount / 100) * .005)
> If raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> rDeath = rDeath - .1
> End If
> If rDeath < .5 Then rDeath = .5
> If rDeath > 1 Then rDeath = 1
> meBaseT.pColonist(i) = meBaseT.pColonist(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pCrew(i)
> meBaseT.pCrew(i) = meBaseT.pCrew(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pGuard(i)
> meBaseT.pGuard(i) = meBaseT.pGuard(i) * rDeath
> dA = dA + dB
> dB = meBaseT.pTroop(i)
> meBaseT.pTroop(i) = meBaseT.pTroop(i) * rDeath
> dA = dA + dB
> vP = (meBaseT.pNum - 1) * 30 + i
> vBlood = vBlood + g_Blood(vP)
> Else
> If meBaseT.pColonist(i) > 0 Then
> LogOut meBaseT.id, "Robot prisoners refuse to work in
> the labor camp, they are just standing around humming."
> End If
> End If
> Else
> If meBaseT.pColonist(i) > 0 Then
> LogOut meBaseT.id, "Cyborg prisoners refuse to work in
> the labor camp, they are just standing around pouting."
> End If
> End If
> END IF
> NEXT i
> IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> dA = dA * 4
> End If
>
> dA = dA / 100
>
> If vBlood > 100 Then
> rOdds = .15
> Elseif vBlood > 50 Then
> rOdds = .35
> Elseif vBlood > 10 Then
> rOdds = .45
> Elseif vBlood > 5 Then
> rOdds = .55
> Else
> rOdds = .80
> End If
>
> IF dA > 0 THEN
> If Rnd < rOdds Then
> If Rnd > .5 Or dA < 20 Then
> LogOut mebaseT.id, "Labor camp riots, nothing produced."
> ElseIf Rnd > .5 Then
> LogOut meBaseT.id, "Prisoners explode supply storage. (10%
> supplies lost)"
> mebaseT.eleS = mebaseT.eleS * .9
> ElseIf Rnd > .5 Then
> LogOut meBaseT.id, "Prisoner escape! Colonists frightened!
> Colonists killed! (-5 happiness) (2% colonists killed)"
> mebaseT.colonistHappy = mebaseT.colonistHappy - Rnd * 5
> meBaseT.colonistOne = mebaseT.colonistOne * .98
> Else
> LogOut meBaseT.id, "Labor camp workers release a nano
> virus, money lost! (10mc per camp)"
> mebaseT.cash = mebaseT.cash - vCount * 10
> If mebaseT.cash < 0 then mebaseT.cash = 0
> End If
> Else
> IF dA > %bill THEN dA = %bill
> v = vCount
> IF v > dA THEN v = dA
> IF meBaseT.eleS < %bill THEN
> meBaseT.eleS = meBaseT.eleS + v
> meBaseT.cash = meBaseT.cash + (v * 10)
> IF raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> meBaseT.cash = meBaseT.cash + (v * 30)
> End If
> END IF
> End If
> END IF
> END SUB
>

G

Guest

Guest

"cocomax" <cocomax@aol.com> schrieb im Newsbeitrag
> rDeath = 1 - (CSng(vCount / 100) * .005)
>
> ** and the Empire gets an extra 10% death rate all the time. . .
>
> If raceA(meBaseT.pNum).racenum = %raceEmpire THEN
> rDeath = rDeath - .1

Ok, but what's then with the x16 income if the camp count is more the four
times than what is needed due to the prisoner count?

GFM GToeroe

G

Guest

Guest

I'm playing the EE and am experiencing problems with labour camps. I
have 2236 of them on my hw and only get about 400 supplies and 15,000
MC. This is a lot less than it states you should get, about 90,000 and
2236 MC. My 356 labour camps on a another world are all produced there
full ammount. And yes all my labour camps are full, I just took out a
players hw and have tons of them.

This is the second turn this has happened now.

G

Guest

Guest

I did some testing over the weekend (i.e. this is host189). As the EE,
I found the failure rate to be about 80% (not great confidence,
though), that cash paid out was constant at 40MCs per prisoner in the
LC, and that death rate was
min{0.5, (LC*100+200,000)/2,000,000, (prisoners + 200,000)/2,000,000}
or
min{0.5, (prisoners in labour camps + 200,000)/2,000,000}.

So for a maxed out world, a death rate of 50% means prisoners get used
an average of twice (1+0.5+0.25+...). With max 20% death rate you used
to be able to get 5 uses per prisoner.

Failure rate of 80% => Success rate of 20% is 1/3rd of what it used to
be at 60%.

2/5 * 1/3 = 2/15 = 13.33%. Labour camps, for the EE, are now 13.33% as
effective as they used to be. In addition, the rarity of success makes
it significantly more of a gamble than it used to be, unless you're
willing to spread out to several prison worlds.

G

Guest

Guest

But as seen in the code the success rate increase as g_blood changes (i.e it
becomes better).
So I suspect that the more you kill of them the more you get like it is with
the Lizards...

GFM GToeroe

"Darth Mark" <markmacwm@rogers.com> schrieb im Newsbeitrag
> I did some testing over the weekend (i.e. this is host189). As the EE,
> I found the failure rate to be about 80% (not great confidence,
> though), that cash paid out was constant at 40MCs per prisoner in the
> LC, and that death rate was
> min{0.5, (LC*100+200,000)/2,000,000, (prisoners + 200,000)/2,000,000}
> or
> min{0.5, (prisoners in labour camps + 200,000)/2,000,000}.
>
> So for a maxed out world, a death rate of 50% means prisoners get used
> an average of twice (1+0.5+0.25+...). With max 20% death rate you used
> to be able to get 5 uses per prisoner.
>
> Failure rate of 80% => Success rate of 20% is 1/3rd of what it used to
> be at 60%.
>
> 2/5 * 1/3 = 2/15 = 13.33%. Labour camps, for the EE, are now 13.33% as
> effective as they used to be. In addition, the rarity of success makes
> it significantly more of a gamble than it used to be, unless you're
> willing to spread out to several prison worlds.
>