Sociopolitics
SDxWiki

Sociopolitics Simulation Engine

This is going to be random notes and a strawman while I try to organize my thinking about how such a system can really be implemented.

Objective: To create in-game dynamism by modelling the change in sociopolitical relationships between background and player-org entities in the game environment.

Engine visualized as a relationship matrix, stored as floats or arrays in a simple database table (type depending on what information is eventually used to characterize the relationships - entirely possible a custom record or object will be preferred), along with necessary functions to operate upon the relationships.

Alternative: Each entity is an "AI object" with relationship information stored as private data. The problem with this is updating all objects with new stored data each time another entity is created or destroyed in the environment.

Functions may include:

||EarthGov|MarsGov|LCA|BeltGov|JovGov|Yoyodyne|Mitsubishi|Lockheed|Humanadyne|ADM|Intelsoft|GenDynamics|SDx| |EarthGov|1||||||||||||| |MarsGov||1|||||||||||| |LunarCA|||1||||||||||| |BeltGov||||1|||||||||| |JovGov|||||1||||||||| |Yoyo||||||1|||||||| |Mitsu|||||||1||||||| |Lckheed||||||||1|||||| |Humana|||||||||1||||| |ADM||||||||||1|||| |Intel|||||||||||1||| |GD||||||||||||1|| |SDx|||||||||||||1|

Scale

1 = maximum positive -1 = maximum negative 0 = neutrality/ambivalence

Question for C++ developers: Easier to work in float or integer math for speed? (integer, IIRC)

DWM Once upon a time, integer was much faster. Don't think there's that much difference anymore, but I'm not sure.

Consider: "Vectors" in one dimension. Relationship data would include:

Event results also have vector values (Direction and Weight). Event results are additive to the Relationship vector. Change occurs per standard unit of time (?). What will be the time rate of events? Should relationships adjust as events occur in real time, or accumulated weights be applied at some regular interval, at which point the relationship adjusts? Could any "adjustment lag" present an opportunity for abuse (this is much more likely an issue on the Player "rap sheet" level than on the entity-entity level, but for example what about a situation where a Player Org terminates a friendly relationship with a government, but before that termination is acknowledged by the government, the Player Org acquires restricted resources in some customary way)?

DWM Lag is inherent to large organizations, so this strikes me as realistic, and not an exploit. If everything else is working reasonably realistically, it's a trick that a player or organization would only get to try once. Then they'd be on some serious shit lists, hard to recoup a reputation you've blown that badly! Istvan True enough, but we'd then have to do things like timestamp events or transactions and set up algorithms that watch for "relationship abuse" within each Org's AI agent (and similarly set up ways that a player Org could also detect such activity if they bother), so that the Orgs can literally "know" when they've been "had" and reset relationships accordingly. I've looked over some of the papers on Fuzzy Logic, but I don't know how deep into second-order and third-order control and monitoring processes we want to get. It'd be mighty cool if it could be done, though.

Are relationships reciprocal? I.e., can (Entity A r-> Entity B != Entity B r-> Entity A)? What about the reflexive property? I.e, Does there exist a relationship (Entity A r-> Entity A), and can it be != 1?

DWM I suggest that attitudes of one entity to another not be reciprocal. I hate you and am plotting against you, but I haven't done anything to arouse your suspicion -- you're neutral or even friendly towards me.

Nonreciprocal relationships are themselves weighting factors for the complementary relationship: if Entity A r-> Entity B = -0.9 , while Entity B r-> Entity A = 0.2, per unit time a "vector" related only to the relationships and not to any specific in-game event acts to cause both relationships to slightly adjust toward an average value. This is acknowledged to assume mutual awareness. Alternatively, each entity (AI) should possess "relationship goals" - these goals drive action and influence decisions. Missions would be assigned, for example, with the expectation that their completion would move the relationships in certain mandated directions.

Another thought -- your matrix need not be complete. I.e., an entity may know nothing about another particular entity, perhaps implying a default neutral stance. From a logical point of view, not much different. In actual fact, all this will probably be in a database, from where it can be queried and arrange in various ways. But arranging it this way might fit better with other data ownership issues -- relationship numbers of Bob towards everyone else are considered part of Bob's defining parameters, which only Bob has permission to modify.

There should be provision made for reflexive relationship change. If (Entity A r-> Entity A < 0) SPE_Create_Entity must be called such that both sides of a potential civil war are represented in-game.

Reflexive -- Instead, consider the fact that the smaller entities probably already exist -- pilots in a squad, for instance, or branches of a government. You can attach relationship information directly to the smaller entities. Then a 'reflexive relationship' measure would actually be a derivative of relationships among members of an entity -- a measure of internal strife, which would probably be used in very different ways from measures of external relationships.

In the event of bifurcation of an entity, the SPE_Create_Entity function (or a variant) would be required to spawn replacement subentities for each "side" of the bifurcation, which might be problematic if the subentities had previous existence. As an added, but necessary complication, players associated with any entity that bifurcates would be required to literally "pick sides" - in which case player inactivity (failure to issue an order making the decision) could present a serious problem (random assignment with option to change on login might be a simplistic, but implementable, solution).

Player Orgs

Player-created and -run organizations will be included in this engine. When a Player Org is created, SPE_Create_Entity will be called initializing all Org relationships at values equal to the average of the member players' values with respect to each game entity.

Provision will exist for declaring a Player Org "defunct", by several means, at which point the inert entity will be housecleaned off the working table and eventually eliminated from storage (SPE_Remove_Entity, SPE_Purge_Stored).

Player Org administrators (players at top Org ranks) will have access to interfaces which permit (A) a moderate to high rate of internal mission creation (B) a moderate rate of external mission creation (C) a low rate of event creation. These interfaces (among others for Player Orgs) will be analogous to AI decision-making processes for non-player Orgs that spawn missions and change relationships.

Events

Preliminary event interaction model:

  1. Mission/Task completion: compare player membership(s) against task owning entity, SPE_Increment_Relationship using task values (importance)
  2. Mission/Task failure: as above
  3. Ship Destruction: compare attacker membership(s) and ratings against defender membership(s) and ratings, SPE_Decrement_Relationship
  4. Facility Damage: compare membership(s) and ratings of source pilot against facility owning entity, SPE_Decrement_Relationship
  5. Flight Reports: players will have option (restricted?) to complete "flight reports" upon arrival/dock events that allow for positive or negative interaction with another Org to be reported. This will allow otherwise untracked in-game interaction to enter the sociopolitical mechanics. Effect of Flight Reports will be minimal compared to other factors, and their use will be regulated.
  6. Unique Events: entered through a development/admin interface, with specified weights and called functions. The provision of an interface for event generation is an important administrative consideration. The unique events should also tie into any news generation and reporting systems in the game.

"Memberships"

All vessels will operate under a "registry" system as well as have an "owner" attribute. For example an independent trader might fly a ship registered with MarsGov ("under MarsGov 'flag', or registry"). Another vessel might be owned by Yoyodyne corp, and be registered with EarthGov. A military vessel would be registered specifically as such, and its acts would have greater weight in the relationship matrix.

Memberships for relationship change and pilot ratings are both considered. If a pilot with a poor rating with EarthGov, in an EarthGov registered ship, destroys a MarsGov-registered vessel, EarthGov is held less accountable by MarsGov. If a pilot with a good rating with EarthGov, in an EarthGov-registered ship, performs the same action, MarsGov will hold EarthGov more accountable. EarthGov military vessels destroying MarsGov-registered ships will elicit a much harsher reaction from MarsGov against EarthGov than the acts of civilians.

"Factors"

Each event type will have a weighting factor per entity. MarsGov, for example, might be more sensitive to Ship Destruction events than EarthGov. A "criminal" Org might have negligible sensitivity to Ship Destruction events committed by its own people (tying into the pilot rating system here - premature). Each unique event will also have a factor, based on some measure of its importance.

Pilot Rating System

Analogous to the PR system in JumpGate, which I participated in designing. This will interact with the main entity Sociopolitical system. This is a system whereby pilot actions are regulated, and which provides weight when a pilot's actions may affect sociopolitical relationships. Low rating wrt an entity equals criminality in the view of that entity.

Ratings for individual pilots wrt entities change on the basis of the same Events listed above: If a pilot in an EarthGov-registered ship completes a task which benefits MarsGov, both the pilot's rating wrt MarsGov and EarthGov's relationship with MarsGov improve.


DWM Rambling on some thoughts elicited by the above. In the following, I assume non-reflexive relationship measures, viewing them for the moment as parameters of an entity rather than entries in a matrix.

In the living game, there will be a steady stream of events occurring in widely dispersed places. Various entities, modelled by (perhaps simple) AI will need to respond to events. In some cases, that response might just be adjusting a relationship measure -- which might of course trigger some additional action. In any case, some thought needs to be given to distribution, encoding, and routing of event information. Many events will be of only local interest, but there will also be wider information flows, perhaps modelling media channels, and communications/data storage within entities (corporations, governments). Even 'inactive' simulated entities will need to periodically examine a backlog of stored information from this flow, and make decisions based on it -- just like a player coming back after a week and catching up on the bboard traffic.

Istvan: For simplicity, I'd stick with a monolithic view of all Orgs, meaning that information transfer within an Org need not be considered. Media channels have value as in-game reporting mechanisms (both as color, and to short-circuit some metagame information flow), and I'd definitely like to include them as a means of event information flow back to the players.

Players should be able to contribute to this machine-readable data flow. For instance: The game doesn't give a hoot who shoots at whom -- that doesn't automatically generate an event in the news flow. But any pilot may file a grievance against another pilot with a governmental authority, or submit a news item to the Galactic News Network. Some standardization of the data entry form for this activity will be needed in order to make it understandable to the AI elements -- I'm assuming we won't have natural language understanding. (Yet. Hehe.)

Of course, such reports might be utter bullshit. So readers of the data stream must also judge the source of the report. This suggests that, rather than a single value for a relationship, it might be desirable to have a more varied measure of attitude. For instance, One might despise Two, but nonetheless consider Two to be a trustworthy source of information. So now you have the parameters TrustworthyAsInfoSource and WouldHaveABeerWith (for a start).

Istvan: I'd consider limiting either the rate of grievance filing (subset of Flight Reports), or weighting the grievance with number per unit time. I.e., the fewer a pilot files, the greater the "trustedness" of those reports. This is perhaps simplistic, but I think "trustedness" of a report would also still increase with a pilots prestige/rep - the dynamic being to polarize entities in alignment with the actions of the prestigious associated players. This is one way to create real power and influence for high-prestige players within the game environment. I do acknowledge the more preferred state described in which "trustedness" is measured separately from "rep" - perhaps the alignment of the variables could diverge in only a subset of cases.

DWM Regarding limiting filing: Yes, or something else along these lines.