Jump to content

The WPCC Lounge


PinkieShadow

Recommended Posts

46 minutes ago, Lucky Bolt said:

*pokes muzzle in* 

I think I should make my presence known here. :dash: *sips coffee* ...hm. Y’all got espresso? 

We have everything. Muffins included :muffins:.


At first I rejected the zero, but that was because I simply didn't understand it. Now I do.

Link to comment
Share on other sites

1 hour ago, Lucky Bolt said:

Well in that case....

*takes a shot of espresso* I needed that 

How are you all? 

Could be worse :)

I prefer a french press to espresso - easier to pick out the more subtle flavours, and doesn't have you pinging off the walls if you drink a bunch of it.

  • Brohoof 1

ᚾᛖᚹ ᛚᚢᚾᚨ ᚱᛖᛈᚢᛒᛚᛁᚴ - ᚦᛖ ᚠᚢᚾ ᚺᚨᚦ ᛒᛖᛖᚾ ᛞᛟᚢᛒᛚᛖᛞ

image.png.1d67db17f637a25cb8070c016012d5cf.png

Link to comment
Share on other sites

5 minutes ago, CypherHoof said:

Could be worse :)

I prefer a french press to espresso - easier to pick out the more subtle flavours, and doesn't have you pinging off the walls if you drink a bunch of it.

...that made me visualise Celly-bug bouncing all over the walls...

I also spent all night figuring out the data flow of this one monster class I just wrote...


a0AgWVX.png

<>

Link to comment
Share on other sites

3 minutes ago, Ganaram Inukshuk said:

...that made me visualise Celly-bug bouncing all over the walls...

I also spent all night figuring out the data flow of this one monster class I just wrote...

Pinkie-bug sounds more likely - or given Silverstream has a piece of the Perl, I am suspicious that she can't formshift to some other form like a changeling if she wants to....


ᚾᛖᚹ ᛚᚢᚾᚨ ᚱᛖᛈᚢᛒᛚᛁᚴ - ᚦᛖ ᚠᚢᚾ ᚺᚨᚦ ᛒᛖᛖᚾ ᛞᛟᚢᛒᛚᛖᛞ

image.png.1d67db17f637a25cb8070c016012d5cf.png

Link to comment
Share on other sites

8 minutes ago, CypherHoof said:

Pinkie-bug sounds more likely - or given Silverstream has a piece of the Perl, I am suspicious that she can't formshift to some other form like a changeling if she wants to....

Wait, Pinkie but as a changeling...?


a0AgWVX.png

<>

Link to comment
Share on other sites

10 minutes ago, Ganaram Inukshuk said:

Wait, Pinkie but as a changeling...?

Maybe she was ALWAYS a changeling. As Sunset Shimmer says - that explains SOOO much...


ᚾᛖᚹ ᛚᚢᚾᚨ ᚱᛖᛈᚢᛒᛚᛁᚴ - ᚦᛖ ᚠᚢᚾ ᚺᚨᚦ ᛒᛖᛖᚾ ᛞᛟᚢᛒᛚᛖᛞ

image.png.1d67db17f637a25cb8070c016012d5cf.png

Link to comment
Share on other sites

1 minute ago, Olly said:

I just saw a huge moth. It was BIG. Big boy moth

Well, if there aren't also ants... you moth-ant worry :)


ᚾᛖᚹ ᛚᚢᚾᚨ ᚱᛖᛈᚢᛒᛚᛁᚴ - ᚦᛖ ᚠᚢᚾ ᚺᚨᚦ ᛒᛖᛖᚾ ᛞᛟᚢᛒᛚᛖᛞ

image.png.1d67db17f637a25cb8070c016012d5cf.png

Link to comment
Share on other sites

Just now, Olly said:

I just saw a huge moth. It was BIG. Big boy moth

There was this "but every other beat is missing" song, but it was "Metallica - Moth into Flame", so it turned into "Meta - Mothie".


a0AgWVX.png

<>

Link to comment
Share on other sites

I think my terror is proportionate to the size of the bug so ants don't really affect me


We have two ears and one mouth, so we should listen more than we say.

Link to comment
Share on other sites

Just now, Olly said:

I think my terror is proportionate to the size of the bug so ants don't really affect me

But what if it was inversely proportional?

Side note: I'm thinking about a distressed Ocellus for no good reason...


a0AgWVX.png

<>

Link to comment
Share on other sites

2 minutes ago, Prometheus said:

Oh damn, this thread is actually hot?!

Could this... could this be the return of the WPCC? :dash:

Hopefully not AS bad as it was last summer - but more active is good :)


ᚾᛖᚹ ᛚᚢᚾᚨ ᚱᛖᛈᚢᛒᛚᛁᚴ - ᚦᛖ ᚠᚢᚾ ᚺᚨᚦ ᛒᛖᛖᚾ ᛞᛟᚢᛒᛚᛖᛞ

image.png.1d67db17f637a25cb8070c016012d5cf.png

Link to comment
Share on other sites

4 minutes ago, Prometheus said:

Oh damn, this thread is actually hot?!

Could this... could this be the return of the WPCC? :dash:

By virtue of being identical to the general chat thread and the fact that thread is as dead as it gets, yes. 

 

5 minutes ago, Ganaram Inukshuk said:

But what if it was inversely proportional?

Like an elephant being scared of a mouse? 

side note did you know cats are terrified of cucumbers


We have two ears and one mouth, so we should listen more than we say.

Link to comment
Share on other sites

3 minutes ago, Olly said:

By virtue of being identical to the general chat thread and the fact that thread is as dead as it gets, yes. 

 

Like an elephant being scared of a mouse? 

side note did you know cats are terrified of cucumbers

I already know about the cucumbers, but have you ever seen a birb annoy a cat?


a0AgWVX.png

<>

Link to comment
Share on other sites

12 minutes ago, Ganaram Inukshuk said:

I already know about the cucumbers, but have you ever seen a birb annoy a cat?

Could make a bear out of cucumbers. A cucumbear....


ᚾᛖᚹ ᛚᚢᚾᚨ ᚱᛖᛈᚢᛒᛚᛁᚴ - ᚦᛖ ᚠᚢᚾ ᚺᚨᚦ ᛒᛖᛖᚾ ᛞᛟᚢᛒᛚᛖᛞ

image.png.1d67db17f637a25cb8070c016012d5cf.png

Link to comment
Share on other sites

33 minutes ago, CypherHoof said:

Could make a bear out of cucumbers. A cucumbear....

The anaconda does not want none unless you got the buns huns


We have two ears and one mouth, so we should listen more than we say.

Link to comment
Share on other sites

2 hours ago, Olly said:

The anaconda does not want none unless you got the buns huns

Sneks can be such adorable noodles sometimes.

Also, uhh... There's like a tango between eight different classes right now... Remember how I said my MarkovTextGenerator was the most complex thing I've ever written? Now this is. I'm still documenting it...

Spoiler

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// Don't attach to a regular old GameObject (unless testing); instead attach to a UI element, empty
// GameObject, or have it be a member of an even larger class (that's attached to a UI or empty GameObject)

// Functionality
// - This combines the functionality of the HousingManager, OccupancyManager, and PopulationManager into one
// - This class's Generate function requires up to 5 inputs: residentialBldgs, occupiedLivingUnits,
//   housingAffector, occupancyAffector, and populationAffector; all but the last one are either floats or ints,
//   with the last being an array of floats
// - There are multiple Generate functions depending on how simple or complex the simulation is

// Dataflow between each manager and counter
//  1. _hsgCtr.Count (the number of residential bldgs) goes into _hsgMgr
//  2. _hsgMgr.Occupancy (the maximum number of living units) goes into _occCtr as _occCtr.Max
//  3. _occCtr.Count (the number of occupied living units) goes into _occMgr
//  4. _occMgr.Population goes into _popMgr
//  5. _popMgr generates a population breakdown for use with other simulators/managers
// In other words, _hsgMgr.Occupancy != _occMgr.OccupancyTotal;
// instead, _hsgMgr.Occupancy == _occCtr.Max and _occCtr.Count == _occMgr.OccupancyTotal


public class ResidentialSimulator {

    // Let's make the WeightAffector a class within the ResidentialSimulator
    // General rules about affectors:
    // - If the probabilities can be generated by a function, like with a Poisson distribution,
    //   then the affectors are the function's parameters
    // - If the probabilities are hardcoded and modified afterwards, then the affector is an
    //   array of values, each affector changing an individual weight independently of the others;
    //   the resulting vector of weights is then reconciled and used for calculations
    // - If the probabilities are hardcoded and modified afterwards but an array of affectors
    //   aren't needed, then multiple parameters may be passed in like with the case of a function
    private static class WeightAffector {

        // Default housing weights; translates to an affector of 8
        public static float[] DefaultHousingWeights {
            get { return new float[] { .875f, .109f, .014f, .002f }; }
        }

        // Default occupancy weights; translates to an affector of 2.5
        public static float[] DefaultOccupancyWeights {
            get { return new float[] { 0.2236f, 0.2795f, 0.2329f, 0.1455f, 0.0728f, 0.0303f, 0.0108f, 0.0034f, 0.0009f, 0.0003f, }; }
        }

        // Default population weights; these are modified by affectors
        public static float[] PopulationWeights {
            get { return new float[] { .062f, .061f, .064f, .064f, .065f, .072f, .067f, .066f, .060f, .062f, .062f, .069f, .064f, .053f, .043f, .029f, .019f, .012f, .005f, .001f }; }
        }

        // Affector function for housing; this is just a geometric progression
        // (1/n^0, 1/n^1, 1/n^2, 1/n^3) converted into probabilities; the only
        // parameter to change is n; recommended range 1-100, default is 8
        public static float[] GenerateHousingWeights(float n) {
            int length = Probabilities.HousingWeights.Length;
            float[] weights = ExtraMath.Geometric(n, length);
            return DistributionGen.Probability.Reconcile(weights);
        }

        // Affector function for occupancy; this is a Poisson distribution
        // Recommended range 2-4, default is 2.5
        public static float[] GenerateOccupancyWeights(float n) {
            int upper = Probabilities.OccupancyWeights.Length;
            return DistributionGen.Function.PoissonZeroReconcile(n, 1, upper);
        }

        // Affector function for population; this is the affect-an-array-with-params method
        // I specified; the affectors translate to desirability towards different types
        // of residents (college students, young workers, families, senior citizens)
    }

    // For use with savefiles and debugging
    public struct ResidentialVectors {
        public int[] housingVector;     // Represents bldgs that are simplexes, duplexes, triplexes, fourplexes
        public int[] occupancyVector;   // Represents living units with 1..10 persons per living unit
        public int[] populationVector;  // Represents population age groups of 0-4, 5-9, ... , 95-99 year ranges
    }

    // For use with getters
    public struct ResidentialTotals {
        public int housingTotal;        // Total number of residential buildings
        public int occupancyTotal;      // Total number of (occupied) living units
        public int populationTotal;     // Total number of people living within all living units
    }

    // A simplified version of the populationVector; corresponds with the PopulationManager's 
    // getter for each population group
    public struct PopulationBreakdown {
        public int infantPopulation;
        public int childPopulation;
        public int teenPopulation;
        public int youngAdultPopulation;
        public int adultPopulation;
        public int seniorPopulation;
    }

    // Managers
    private readonly HousingManager    _hsgMgr = new HousingManager();
    private readonly OccupancyManager  _occMgr = new OccupancyManager();
    private readonly PopulationManager _popMgr = new PopulationManager();

    // Counters
    private readonly Counter _hsgCtr = new Counter( );      // This doesn't need a (specified) max unless you wanna simulate construction
    private readonly Counter _occCtr = new Counter(0);      // This max is initially zero until _hsgMgr generates an occupancy

    // A simplified Generate function that doesn't need any parameters; it uses whatever values are
    // stored in its counters and the default weights

    // A simplified Generate function that uses default weights and two parameters that set
    // the counters accordingly
    public void GenerateResidents(int housingAffector, int occupancyAffector) {

    }

    // A three-paramater Generate function; this should be the default for simulation and should be
    // called every in-game week
    public void GenerateResidents(float[] housingWeights, float[] occupancyWeights, float[] populationWeights) {
        _hsgMgr.GenerateHousingVector(_hsgCtr.Count, housingWeights);
        _occCtr.Max = _hsgMgr.Occupancy;
        _occMgr.GenerateOccupancyVector (_occCtr.Count     , occupancyWeights );
        _popMgr.GeneratePopulationVector(_occMgr.Population, populationWeights);
    }

    // A five-parameter Generate function that sets the counters accordingly; the first two parameters 
    // are residentialBldgs (the total number of residential buildings) and occupiedLivingUnits (the number of
    // occupied living units); set occupiedLivingUnits to -1 to force using the highest possible value
    // The other three parameters are self-explanatory
    public void GenerateResidents(int residentialBldgs, int occupiedLivingUnits, float housingAffector, float occupancyAffector, float[] populationWeights) {
        float[] housingWeights   = WeightAffector.GenerateHousingWeights(housingAffector);
        float[] occupancyWeights = WeightAffector.GenerateOccupancyWeights(occupancyAffector);
        
        _hsgCtr.Count = residentialBldgs;
        _hsgMgr.GenerateHousingVector(_hsgCtr.Count, housingWeights);
        _occCtr.Max = _hsgMgr.Occupancy;

        if (occupiedLivingUnits == -1)     _occCtr.MaxOutCount();
        else if (occupiedLivingUnits >= 0) _occCtr.Count = occupiedLivingUnits;
        else _occCtr.Count = 0;

        _occMgr.GenerateOccupancyVector (_occCtr.Count     , occupancyWeights );
        _popMgr.GeneratePopulationVector(_occMgr.Population, populationWeights);
    }

    public ResidentialVectors Vectors {
        set {
            _hsgMgr.HousingVector    = value.housingVector;
            _occMgr.OccupancyVector  = value.occupancyVector;
            _popMgr.PopulationVector = value.populationVector;

            // The struct doesn't have values that directly repopulate the counters, but
            // once the managers are populated, they can be used to repopulate the counters
            // Note: _occMgr.OccupancyTotal and _occCtr.Count are equivalent
            // and _hsgMgr.HousingTotal and _hsgCtr.Count are equivalent
            _hsgCtr.Count = _hsgMgr.HousingTotal;
            _occCtr.Count = _occMgr.OccupancyTotal;
        }
        get {
            ResidentialVectors rv;
            rv.housingVector    = _hsgMgr.HousingVector;
            rv.occupancyVector  = _occMgr.OccupancyVector;
            rv.populationVector = _popMgr.PopulationVector;
            return rv;
        } 
    }

    // The only reason I'm allowing this to be its own getter is to bypass the need to
    // call DistributionGen.Histogram.SumOfElements()
    public ResidentialTotals Totals {
        get {
            ResidentialTotals rt;
            rt.housingTotal    = _hsgMgr.HousingTotal;
            rt.occupancyTotal  = _hsgMgr.Occupancy;
            rt.populationTotal = _occMgr.Population;
            return rt;
        } 
    }

    public PopulationBreakdown PopulationTotals {
        get {
            PopulationBreakdown pb;
            pb.infantPopulation     = _popMgr.InfantPopulation;
            pb.childPopulation      = _popMgr.ChildPopulation;
            pb.teenPopulation       = _popMgr.TeenPopulation;
            pb.youngAdultPopulation = _popMgr.YoungAdultPopulation;
            pb.adultPopulation      = _popMgr.YoungAdultPopulation;
            pb.seniorPopulation     = _popMgr.SeniorPopulation;
            return pb;
        }
    }

    public void PrintDebugString() {
        string outputString = GetDebugString();
        Debug.Log(outputString);
    }

    public string GetDebugString() {
        return "[ResidentialSimulator]: Hsg: " 
            + _hsgMgr.HousingTotal     + ", Occ: " 
            + _occCtr.Count            + " out of "
            + _occCtr.Max              + ", Pop: "
            + _popMgr.PopulationTotal  + "\n"
            + _hsgMgr.GetDebugString() + "\n"
            + _occMgr.GetDebugString() + "\n"
            + _popMgr.GetDebugString();
    }
}

 

 


a0AgWVX.png

<>

Link to comment
Share on other sites

9 hours ago, Ganaram Inukshuk said:

Sneks can be such adorable noodles sometimes.

They just want you to think that :)

(avoid the 24Ω danger noodles though)

 

*passes the other grey pone a coffee*


ᚾᛖᚹ ᛚᚢᚾᚨ ᚱᛖᛈᚢᛒᛚᛁᚴ - ᚦᛖ ᚠᚢᚾ ᚺᚨᚦ ᛒᛖᛖᚾ ᛞᛟᚢᛒᛚᛖᛞ

image.png.1d67db17f637a25cb8070c016012d5cf.png

Link to comment
Share on other sites

28 minutes ago, Unimportant Pony said:

*accepts the coffee*

*sets up another one in case it wasn't meant for him*

Is there anypony else I refer to as that then? :)


ᚾᛖᚹ ᛚᚢᚾᚨ ᚱᛖᛈᚢᛒᛚᛁᚴ - ᚦᛖ ᚠᚢᚾ ᚺᚨᚦ ᛒᛖᛖᚾ ᛞᛟᚢᛒᛚᛖᛞ

image.png.1d67db17f637a25cb8070c016012d5cf.png

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Join the herd!

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...