home.social

#lise — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #lise, aggregated by home.social.

fetched live
  1. 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.

  2. Version 0.18.0 of #Lisien, formerly #LiSE, the rules-based, time-traveling engine for life simulation games, has been released. clayote.itch.io/lisien/devlog/

    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 big property to True for those.

    #python #lifeSim #gameDev #customEngine

  3. @aeva the next release is going to be a lot better at handling rules that make big changes to the world. also I'm renaming #LiSE to #Lisien

    Probably going to implement the Sugarscape model for an example sim next...

  4. 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.

  5. 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.

  6. 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?

    #backend #webdev

  7. 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 ELiDE

    Or download on @itchio:
    clayote.itch.io/lise

    #gameDev #gameEngine

  8. 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

  9. 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

  10. Released #LiSE 0.17.0 github.com/TacticalMetaphysics

    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.

    #gamedev #python #customEngine #lifeSim #alife

  11. LB: Well, I guess now I know what ELiDE's "calendar" interface really needs to look like #LiSE

  12. 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.

    clayote.itch.io/lise/devlog/81

  13. Released LiSE 0.16.0 clayote.itch.io/lise/devlog/81

    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: peoplemaking.games/@clayote/11

    If you're embedding LiSE in some other engine, you might just want to upgrade right away!

    #LiSE #gamedev #customEngine #python

  14. 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.

    #LiSE

  15. 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

    #LiSE #gamedev

  16. 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

    #LiSE #gamedev

  17. 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

  18. And now, #LiSE has a process pool, which you can use to do a load of pathfinding at once

  19. 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

  20. This is very likely the faster solution in any case

    And may one day let you offload some of your sim to another computer

    #LiSE

  21. 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

  22. Hey, I don't know, maybe making rule triggers evaluate in parallel isn't too hard to do? #LiSE

  23. 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

    #LiSE

  24. 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

  25. ugh, this implementation of neighborhoods performs so damn badly you're better off rolling your own #LiSE

  26. 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...

    #LiSE

  27. 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

    #LiSE