#lise — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #lise, aggregated by home.social.
-
In Omsewitz endet eine Fahrt mit einem Multicar an einem geparkten BMW iX2. Dahinter steckt mehr als nur ein Blechschaden: Der Fahrer hatte 2,3 Promille und keinen Führerschein. #Dresden #DresdenNews #Dresden-Omsewitz #Lise-Meitner-Straße #Harry-Dember-Straße #DresdnerPolizeibericht #Polizeibericht #Blaulicht #Multicar https://bit.ly/4cG7zX8 https://www.diesachsen.de/dresden-news/betrunkener-multicar-fahrer-hatte-keinen-fuehrerschein-3127972?utm_source=Mastodon&utm_medium=publizer&utm_content=textlink
-
Verkackte Ästhetik: Nerd Frau.
"Eine ganz neue Form von Männlichkeit"
als #Bindeglied zu stumpf auf #Pickup #Autismus dressierten #pseudo i#nteressierten #Nerd #Frauen wie #Lise, oder #PC #Games #Spielezeitschrift #Quotenfrauen, die den Job ggf. nur wie Schauspieler mit #geheucheltem #Interesse übernommen haben für Bonus Cash Maximierung (aka Lise + Soziologie).
Paradigmatisch dazu der Frauen Podcast zu Shadow Run.
Autisten Zucht von Nerd Lolita Frauen.
Seltsamste Spleens, ungültig alles.
-
Version 0.18.0 of #Lisien, formerly #LiSE, the rules-based, time-traveling engine for life simulation games, has been released. https://clayote.itch.io/lisien/devlog/886357/v0180-big-rules
This release improves support for rules that make a lot of changes to the world. Most won't, so decide which ones will, and set the
bigproperty toTruefor those. -
Turns out, #LiSE is a difficult name to search for. I am open to suggestions for what to call it; the current pun was something that gave me a chuckle in 2013, that's all.
-
Working on a #LiSE feature to automagically batch the changes each action function makes to the world state. Basically, in normal operation, your rules will never work on a LiSE entity directly, instead changing a "facade" of it, which has the same API. Then, between actions, the rules engine looks at the changes that the facade stored, and does them for real, in a batch mode that skips a bunch of caching we were previously doing after every change.
-
Since I won't really be able to hunt for work for the rest of the year, I'm thinking of working on the web frontend for #LiSE, and turn it into a #django module, rather than the current situation where it's a #cherryPy "app"
Are there best practices, or maybe even frameworks similar to the #djangoRestFramework, that would show me how to make LiSE produce its #messagepack for easy consumption by browsers or whatever?
-
Released version 0.17.2 of #LiSE, the time-traveling, rules-based #lifeSim engine.
This release fixes the rule poller. Previous 0.17 releases could only run rules assigned to whole graphs; now, once again, you can assign them to parts of graphs.
Install in #Python:
python -m pip install -U LiSE ELiDEOr download on @itchio:
https://clayote.itch.io/lise -
A use case I have in mind for #LiSE is a kind of anarchist pedagogy
Faced with a system you wish to understand, you might make a sim of it, and consult with experts on how to make it most accurate; but your choices on what to include, and how, will be informed by your particular reason for simulating it
That done, you publish your results, even if it's just on itch or wherever; other people run your sim; and they disagree with some of your choices, so they modify it, and publish their modification
The people making the simulations need not have any qualifications but middlin' Python ability and a thirst for knowledge, which they'll find and/or generate in the process of making the sims, and record for posterity in that same form
-
It turned out that, while overhauling the caches to use keyframes for everything, I forgot all about a part of the rule poller that relied on the old bad way of storing much of the game state, and it stopped polling all kinds of stuff. Now I've taken that out, and it polls correctly again, but is *excruciatingly slow*, because I just took out the bit that skips over entities that never had any rules applied. It *shouldn't* be hard to write a new thing that does that, I hope... #LiSE
-
Here's a demo of the life simulator engine #LiSE. vimeo.com/815795673
LiSE demo 0.14.0 -
Released #LiSE 0.17.0 https://github.com/TacticalMetaphysics/LiSE/releases/tag/v0.17.0
This release contains no new features, but changes some of the fundamentals of the data model to behave more reliably. It should be much more stable.
LiSE is a rules engine and journaling state container for life sim games, like Maxis used to make.
-
LB: Well, I guess now I know what ELiDE's "calendar" interface really needs to look like #LiSE
-
Released #LiSE 0.16.13, which is a micro release that changes the API. Thankfully I have no users.
Parallelism wasn't really working, because the worker processes weren't getting informed when new Characters were created with state in them. They thought they were blank. Solved by sending over the whole world state, which is too much, but, eh, works fine.
-
Released LiSE 0.16.0 https://clayote.itch.io/lise/devlog/813642/0160-multiprocess-parallelism
Originally I was going to wait for some UI improvements for the next release, but this felt too good to keep to myself: triggers for your game's rules are now evaluated in parallel by default. You can do, say, pathfinding in parallel too, if you like: https://peoplemaking.games/@clayote/113239951409502426
If you're embedding LiSE in some other engine, you might just want to upgrade right away!
-
The Parquet based storage isn't ready yet, but in the sim it did run, it turned a 150Mb world into a 280Kb one.
That's
I'm
Huh.
-
CW: The body of `find_path_somewhere` if you care
@eng.function
def find_path_somewhere(node):
from networkx.algorithms import astar_path
from math import sqrt
x, y = node.location.name
destx = 100 - int(x)
desty = 100 - int(y)
while (destx, desty) not in node.character.place:
if destx < 99:
destx += 1
elif desty < 99:
destx = 0
desty += 1
else:
destx = desty = 0
ret = astar_path(
node.character,
node.location.name,
(destx, desty),
lambda a, b: sqrt((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2),
)
print(f"{node.name}'s shortest path to {destx, desty} is {ret}")
return ret -
CW: Look how easy it is to pathfind in parallel in a LiSE game now
@phys.rule
def go_places(char):
from networkx.exception import NetworkXNoPath
futs = []
with char.engine.pool as pool:
for thing in char.thing.values():
fut = pool.submit(
char.engine.function.find_path_somewhere, thing
)
fut.thing = thing
futs.append(fut)
with char.engine.batch():
for fut in futs:
try:
result = fut.result()
thing = fut.thing
print(f"got path {result} for thing {thing.name}")
thing.follow_path(result, check=False)
except NetworkXNoPath:
print(f"got no path for thing {fut.thing.name}")
continue -
Of course I solve #LiSE multiprocessing right as a new Python version comes out that lets you use threads for your parallel programming
This way is probably faster I guess
-
And now, #LiSE has a process pool, which you can use to do a load of pathfinding at once
-
Yep, merged the #LiSE branch with parallel triggers
Still opt-in for now
But I'm probably going to change that, because this makes your sim faster for free
-
This is very likely the faster solution in any case
And may one day let you offload some of your sim to another computer
-
I mean it was happening anyway, with GILless builds of Python 3.13, but I'm doing it with subprocesses now and... it seems to work... #LiSE
-
Hey, I don't know, maybe making rule triggers evaluate in parallel isn't too hard to do? #LiSE
-
Well, basically I ended up starting every neighborhood with the place something's in
It will probably cause some confusion down the line, but it works more like what I intuitively expect this way
I'll just document it
-
haha um it turns out that instantiating loads and loads of objects is kind of bad for performance huh
so now, neighborhood evaluation just, doesn't do that #LiSE
-
ugh, this implementation of neighborhoods performs so damn badly you're better off rolling your own #LiSE
-
Well, implementing neighborhoods for changes to nodes or edges turned out not to be very difficult
There's an easy way to implement a check for if any neighbors were created last turn, too
But if former neighbors were deleted, that should probably cause the rule to run as well, and I'm not coming up with a way to detect that apart from collecting the set of neighbors twice.
May as well...
-
Pondering how to define the cellular automata concept of a "neighborhood" for a directed graph with a containment hierarchy
If a node is inside another node, but not connected by an edge, it's surely still in the neighborhood? Right? It makes sense on the face of it