# Transport Tycoon – Megalev on railroad tracks?!

During the later stage of a game, it is a common headache to upgrade railroad when newer system is available in Transport Tycoon. Not to mention complex network crisscrossing every other route, demolishing and rebuilding even a straight track could be tiring. This trick was discovered by accident and works like this: if a road track and a railroad track is on the same tile (which has always been legal for road vehicle to cross through railway), Megalev vehicles can pass straight through instead of stopping for wrong type of track! This essentially allowed Megalev to run on railroad track all the way without forcing player upgrading to Megalev track.

There is a catch though. Since the only legal way to lay road perpendicular to railway track is on flat surface and “straight” railway track, there is no way for this trick to work on slopes, nor any complex railroad tracks. No workaround except to build connect with a real Megalev track on slopes.

Now, it is time for some accounting to compare the total cost.

Using trick – Road junction on top of Railway track

\$6,078 + \$9,524 = \$15,602

Normal – Demolish Railway track and lay Megalev track

\$6,078 – \$3,714 + \$5,174 = \$7,538

The convenience for not demolish and rebuild by using the road junction trick cost almost double.

# Nspire fight back in the overclock race

In a previous installment, fx-9860GII beats Nspire CX CAS in an overclocking match, computing the parameters for a logistic regression function by the Nelder-Mead algorithm programmed in their respective on-calculator environment. It is quite astonishing not only to see Nspire losing in the speed race, but also by how much it loses.

To give the CX a second chance, while still maintaining the overall fairness, the program on the Nspire is enhanced by localizing variables (33 of them) and nothing else. The declaration of scope for variables is believed to be a common technique for performance boost. The logic of the program remain unchanged, so is the tolerance parameter.

And the results – Nspire is catching up by doubled performance from 63 seconds to 33 seconds!

# Casio fx-9860GII Equation Solver performance improvement by overclocking

In last installment, the Casio overclocking utility Ftune2 improved the speed performance of a Nelder-Mead program by 4.5 times. For standard calculations, more impressive results are obtained from this nice utility. In this test, the standard normal distribution function is applied in the Casio fx9860GII Equation Solver and the task is to find the Z variable (as “T” in the below screen), given the cumulative probability distribution of 0.9 (as “A” in the below screen).

`A=1÷(√(2π))×∫(e^(-X²÷2),-999,T)`

In other words, the solver’s task is to find Z from the given area of 0.9 as shaded in the below chart, which is obtained for verifying the solver’s result of 1.28155156 using the command
`Graph Y=P(1.28155156)`.

And here is the result on speed performance:

00:38 No overclocking, back-lit OFF
00:40 No overclocking, back-lit ON
00:06 Overclocked 265.42 MHz, USB OFF, back-lit OFF
00:07 Overclocked 265.42 MHz, USB OFF, back-lit ON
00:05 Overclocked 265.42 MHz, USB ON, back-lit OFF
00:05 Overclocked 265.42 MHz, USB ON, back-lit ON

The performance gain by overclocking is 7.6 to 8 times, depending whether the back-lit is on for non-overclocked runs.

For the same equation solving by the TI Nspire using `nsolve()`, it took 01:30 to return a result of 1.28155156555.

However, using the built-in standard functions `NormCD()` for the Casio and `normCdf()` for the TI as below

```Casio fx-9860GII

A=NormCD(-999,T)

TI Nspire

nsolve(normCdf(-∞,x,0,1)=0.9,x)```

both units return results instantaneously (Nspire returns 1.28155193868 while Casio returns 1.281551566).

# A comparison on performance of overclocked Nspire CX CAS and fx-9860GII

Overclocking CPU is a trick to yield better performance in speed without any change to hardware or software. At clock frequency higher than those specified by the hardware manufacturer, this technique consumes more electricity as a tradeoff. This used to be referring to PC but thanks to the “openness” of modern calculators and efforts from hobbyists and developers, we are able to unlock the true power of our advanced calculators. In this case, a comparison of TI Nspire CX CAS and Casio fx-9860GII is carried out. The result is quite surprising. For the test case, a Nelder-Mead algorithm programmed in the calculators’ default on-calc programming environment is used as the benchmark. This mean no native code is used. At the same time, no special optimization is done for each of the test-beds. The program will then run a test data set to find the three parameters for a logistic regression function for a coffee shop sales prediction scenario. For fairness, the same initial set of parameters are used for the Nelder-Mead algorithm, as well as the tolerance level (1E-12). The results obtained from both calculators are verified to exact to 4 decimal places. For overclocking, the TI is running ndless with Nover 3. And the Casio is on Ftune2 v1.01. Only one overclocking performance is measured for the TI in the test which is the max stable obtainable from my hardware, 234 MHz. On the Casio, several settings are attempted, ranging from 58.98, 29.49, 117.96, 235.93, and finally 265.42 MHz. It should also be noted that the trials are done while the USB cable is plugged in, where a better performance can be obtained on overclocked Casio. Until there are definitive explanation for this, I can only speculate the Casio will be running at higher voltage while on USB and that somehow improved the performance, pretty much like the ATmel 3.3V and 5V difference. The results on performance are plotted below, with the x-axis the CPU overclocking rate and y-axis the relative performance (higher the better). While the Nspire CX CAS defaults at 132 MHz, the Casio already wins at 117.96 MHz by finishing the test case twice as fast. On the Nspire,1.5 times performance gain is obtained from the max overclock rate. At max overclock 265.42 MHz, the Casio runs almost 4.5 times faster than normal.

In next installment, measurements on performance by Ftune2 for the Casio will reveal the improvements by overclocking to the standard calculation functions (i.e. non-programming).

# Implementing Nelder-Mead on Casio fx-9860GII

The Nelder-Mead algorithm is a very versatile optimization technique that is easy to implement. Having covered on how such a program in the TI-nSpire can help in estimating GARCH parameters, fitting logistic regression and Gompertz curve, I have decided to give it a try on a Casio fx-9860GII. It will also be an interesting opportunity to see the comparison of how these two calculators perform.

Compared to the more sophisticated programming features available on the TI-nSpire, programming the Nelder-Mead using the Casio language on the fx-9860GII is quite a challenge. Variables are limited to 28 and only single alphabet variable name is supported. Extra porting efforts are needed to deal with array features which must be borrowed from the fixed 26 List and 26 Matrix memory, and lack of `elseif` construct (not a big deal usually but just required extra effort in porting programming especially for those with nested loops). Fortunately, the expression evaluation feature is present on the Casio which is an important part for a dynamic implementation of the algorithm, otherwise there will be a strong cohesion between the algorithm itself and the function it handles.

For a quick porting, the structure and variables of the original program from the TI-Basic are preserved without much adaptations except those that are required for the program to work on the fx-9860GII like changing variable names to single alphabets, mapping arrays into Matrices and Lists etc.

After exhausting almost all 28 variables and 10+ matrices, it is about time to do a speed comparison. As used previously to benchmark the same program on the TI-nSpire, the Rosenbrog function is used again. For a fair comparison, the same initial parameter set `{10,10}` will be used on both machines.

And the result on performance:

0:22 Nspire CX CAS
1:25 fx-9860GII (version with in-line objective function)
1:28 fx-9860GII (version with objective function as string variable)

It is not that bad for the clock speed from the Casio (no overclocking) and also worth mention is that no particular optimization was done during code porting, and also the fact that the program is in Casio BASIC which is an interpreted language with execution performance far below native C.

In next installment, exciting results on boosted performance by overclocking will be posted for the same algorithm on the same hardware.

All programming on the Casio was done on the real calculator. The keys are nice and soft. With a user-friendly and consistent menu system to code the program, porting an existing program is not as tedious as previously thought, but rather a pleasant journey to learn another calculator as well as a refreshment to the Nelder-Mead algorithm.