ChaosSIM / ChaosSim.nb
Mentors4EDU's picture
Upload 7 files
e2150b1 verified
(* Content-type: application/vnd.wolfram.mathematica *)
(*** Wolfram Notebook File ***)
(* http://www.wolfram.com/nb *)
(* ChaosSim - Chaos Simulation System *)
(* Combining Bernoulli Numbers, Fibonacci Sequences, and Nash Equilibrium *)
(* ::Title:: *)
(*ChaosSim: Advanced Chaos Simulation Framework*)
(* ::Section:: *)
(*Initialization and Setup*)
(* Load utility functions *)
Get[FileNameJoin[{NotebookDirectory[], "MathUtils.wl"}]]
(* Set random seed for reproducibility (optional) *)
(* SeedRandom[12345] *)
(* ::Section:: *)
(*Bernoulli Number-Based Chaos Generation*)
(* ::Subsection:: *)
(*Bernoulli Chaos Functions*)
BernoulliChaosWeight[n_Integer] := Module[{b},
b = BernoulliB[n];
If[b == 0, 0.001, Abs[N[b]]]
]
SimulateBernoulliChaos[iterations_Integer, complexity_Integer: 10] := Module[
{weights, chaosSequence, currentState},
weights = Table[BernoulliChaosWeight[i], {i, 2, complexity}];
weights = weights / Total[weights]; (* Normalize *)
currentState = 0.5;
chaosSequence = Table[
currentState = Mod[
currentState +
Sum[weights[[i]] * Sin[2 * Pi * currentState * i], {i, 1, Length[weights]}] +
RandomReal[{-0.1, 0.1}],
1.0
],
{iterations}
];
chaosSequence
]
BernoulliAttractor[steps_Integer: 1000, dimension_Integer: 3] := Module[
{points, x, y, z, bn},
x = 0.1; y = 0.1; z = 0.1;
points = Table[
bn = BernoulliChaosWeight[Mod[i, 20] + 1];
x = Mod[x + bn * Sin[y] + 0.1 * RandomReal[], 2] - 1;
y = Mod[y + bn * Cos[z] + 0.1 * RandomReal[], 2] - 1;
z = Mod[z + bn * Sin[x] + 0.1 * RandomReal[], 2] - 1;
{x, y, z},
{i, 1, steps}
];
points
]
(* ::Section:: *)
(*Fibonacci-Based Chaos Patterns*)
(* ::Subsection:: *)
(*Fibonacci Chaos Functions*)
FibonacciChaosSequence[depth_Integer, variance_Real: 0.1] := Module[
{fibs, ratios, chaosSeq},
(* Generate Fibonacci numbers *)
fibs = Table[Fibonacci[n], {n, 1, depth}];
(* Calculate golden ratio approximations *)
ratios = Table[N[fibs[[i + 1]] / fibs[[i]]], {i, 1, depth - 1}];
(* Create chaos from ratio deviations *)
chaosSeq = Table[
Mod[ratios[[i]] + variance * RandomReal[{-1, 1}], 2],
{i, 1, Length[ratios]}
];
chaosSeq
]
FibonacciSpiral3D[turns_Integer: 20, pointsPerTurn_Integer: 50] := Module[
{goldenAngle, points, theta, r, z, fib},
goldenAngle = 2.0 * Pi * (1 - 1/GoldenRatio);
points = Table[
fib = Fibonacci[Floor[i / 100] + 1];
theta = i * goldenAngle;
r = Sqrt[i] / Sqrt[turns * pointsPerTurn];
z = (i / (turns * pointsPerTurn)) * fib * 0.01;
{r * Cos[theta], r * Sin[theta], z + 0.01 * RandomReal[{-1, 1}]},
{i, 1, turns * pointsPerTurn}
];
points
]
FibonacciChaosMap[iterations_Integer: 1000] := Module[
{sequence, x, fn, fnMinus1},
x = 0.5;
fn = 1; fnMinus1 = 1;
sequence = Table[
(* Update Fibonacci numbers *)
{fn, fnMinus1} = {fn + fnMinus1, fn};
(* Create chaotic map using Fibonacci ratio *)
x = Mod[
x * N[fn/fnMinus1] * (1 - x) + 0.05 * RandomReal[{-1, 1}],
1.0
],
{i, 1, iterations}
];
sequence
]
(* ::Section:: *)
(*Nash Equilibrium and Game Theory*)
(* ::Subsection:: *)
(*Game Theory Functions*)
(* Two-player game Nash equilibrium finder *)
FindNashEquilibrium[payoffMatrix1_List, payoffMatrix2_List] := Module[
{strategies1, strategies2, bestResponses1, bestResponses2, equilibria},
(* Find best responses for player 1 *)
bestResponses1 = Table[
Position[payoffMatrix1[[All, j]], Max[payoffMatrix1[[All, j]]]],
{j, 1, Length[payoffMatrix1[[1]]]}
];
(* Find best responses for player 2 *)
bestResponses2 = Table[
Position[payoffMatrix2[[i, All]], Max[payoffMatrix2[[i, All]]]],
{i, 1, Length[payoffMatrix2]}
];
(* Find mutual best responses (pure strategy Nash equilibria) *)
equilibria = {};
Do[
If[MemberQ[Flatten[bestResponses1[[j]], 1], {i}] &&
MemberQ[Flatten[bestResponses2[[i]], 1], {j}],
AppendTo[equilibria, {i, j}]
],
{i, 1, Length[payoffMatrix1]},
{j, 1, Length[payoffMatrix1[[1]]]}
];
equilibria
]
(* Chaotic game simulation with evolving payoffs *)
ChaosGameSimulation[rounds_Integer, players_Integer: 2, volatility_Real: 0.2] := Module[
{payoffs, history, currentStrategy, equilibrium},
(* Initialize random payoff matrices *)
payoffs = {
RandomReal[{-1, 1}, {3, 3}],
RandomReal[{-1, 1}, {3, 3}]
};
history = Table[
(* Find Nash equilibrium *)
equilibrium = FindNashEquilibrium[payoffs[[1]], payoffs[[2]]];
(* Record current state *)
currentStrategy = If[Length[equilibrium] > 0,
equilibrium[[1]],
{RandomInteger[{1, 3}], RandomInteger[{1, 3}]}
];
(* Evolve payoff matrices chaotically *)
payoffs = Map[
# + volatility * RandomReal[{-1, 1}, Dimensions[#]] &,
payoffs
];
{round, currentStrategy, equilibrium},
{round, 1, rounds}
];
history
]
(* Nash equilibrium in chaos: Multiple agents competing *)
MultiAgentChaosEquilibrium[agents_Integer: 5, iterations_Integer: 100] := Module[
{states, fitness, chaos},
(* Initialize agent states *)
states = RandomReal[{0, 1}, agents];
chaos = Table[
(* Calculate fitness based on Bernoulli-weighted distance *)
fitness = Table[
Sum[
BernoulliChaosWeight[j] * Abs[states[[i]] - states[[j]]],
{j, 1, agents}
],
{i, 1, agents}
];
(* Update states toward Nash equilibrium (minimize conflict) *)
states = Table[
Mod[
states[[i]] +
0.1 * (Mean[states] - states[[i]]) +
0.05 * RandomReal[{-1, 1}],
1.0
],
{i, 1, agents}
];
{iter, states, fitness},
{iter, 1, iterations}
];
chaos
]
(* ::Section:: *)
(*Combined Chaos Simulation*)
(* ::Subsection:: *)
(*Integrated Chaos Functions*)
UnifiedChaosSimulation[steps_Integer: 500] := Module[
{bernoulliComponent, fibonacciComponent, gameComponent, combined},
(* Generate all three components *)
bernoulliComponent = SimulateBernoulliChaos[steps, 15];
fibonacciComponent = FibonacciChaosMap[steps];
gameComponent = MultiAgentChaosEquilibrium[5, steps];
(* Combine into unified chaos signature *)
combined = Table[
{
bernoulliComponent[[i]],
fibonacciComponent[[i]],
Mean[gameComponent[[i, 2]]]
},
{i, 1, steps}
];
combined
]
ChaosCorrelationAnalysis[data_List] := Module[
{bernoulli, fibonacci, nash, correlations},
bernoulli = data[[All, 1]];
fibonacci = data[[All, 2]];
nash = data[[All, 3]];
correlations = {
{"Bernoulli-Fibonacci", Correlation[bernoulli, fibonacci]},
{"Bernoulli-Nash", Correlation[bernoulli, nash]},
{"Fibonacci-Nash", Correlation[fibonacci, nash]}
};
correlations
]
(* ::Section:: *)
(*Visualization Helpers*)
PlotBernoulliChaos[data_List] :=
ListPlot[data,
PlotStyle -> {Blue, PointSize[Small]},
PlotLabel -> "Bernoulli Number Chaos",
AxesLabel -> {"Iteration", "State"},
ImageSize -> Large
]
PlotFibonacciChaos[data_List] :=
ListPlot[data,
PlotStyle -> {Orange, PointSize[Small]},
PlotLabel -> "Fibonacci Chaos Sequence",
AxesLabel -> {"Iteration", "State"},
ImageSize -> Large
]
Plot3DChaos[points_List] :=
ListPointPlot3D[points,
PlotStyle -> {ColorFunction -> "Rainbow", PointSize[Tiny]},
BoxRatios -> {1, 1, 1},
ImageSize -> Large,
PlotLabel -> "3D Chaos Attractor"
]
(* ::Section:: *)
(*Example Usage*)
(* Uncomment to run examples *)
(*
Print["=== ChaosSim Initialized ==="]
Print["Generating Bernoulli Chaos..."]
bernoulliData = SimulateBernoulliChaos[500, 12];
PlotBernoulliChaos[bernoulliData]
Print["Generating Fibonacci Chaos..."]
fibData = FibonacciChaosSequence[100, 0.15];
PlotFibonacciChaos[fibData]
Print["Finding Nash Equilibrium..."]
payoff1 = {{3, 0}, {5, 1}};
payoff2 = {{3, 5}, {0, 1}};
equilibria = FindNashEquilibrium[payoff1, payoff2]
Print["Running Unified Chaos Simulation..."]
unified = UnifiedChaosSimulation[300];
correlations = ChaosCorrelationAnalysis[unified]
*)
Print["ChaosSim loaded successfully. All functions available."]