Exemple #1
0
def test_kolmogorov_smirnov_d(model):
    # Test made by Yalin.
    import numpy as np
    import biosteam as bst
    from chaospy import distributions as shape

    bst.settings.set_thermo(['H2O', 'Ethanol'], cache=True)

    s1 = bst.Stream('s1', H2O=100)
    M1 = bst.MixTank(ins=s1)
    M2 = bst.MixTank(ins=M1 - 0)
    sys = bst.System('sys', path=(M1, M2))

    model = bst.Model(sys)

    baseline = 1
    distribution = shape.Uniform(lower=0.5, upper=1.5)

    @model.parameter(name='M1 tau',
                     element=M1,
                     kind='coupled',
                     distribution=distribution,
                     units='hr',
                     baseline=baseline)
    def set_M1_tau(i):
        M1.tau = i

    baseline = 1.75
    distribution = shape.Uniform(lower=1, upper=2)

    @model.parameter(name='M2 tau',
                     element=M2,
                     kind='coupled',
                     distribution=distribution,
                     units='hr',
                     baseline=baseline)
    def set_M2_tau(i):
        M2.tau = i

    model.metrics = [
        bst.Metric(name='tau1', getter=lambda: M1.tau, units='hr', element=M1),
        bst.Metric(name='tau2', getter=lambda: M2.tau, units='hr', element=M2),
    ]

    np.random.seed(3221)
    samples = model.sample(100, rule='L')
    model.load_samples(samples)
    model.evaluate()

    D, p = model.kolmogorov_smirnov_d(
        thresholds=[1, 1.5])  # Just make sure it works for now
Exemple #2
0
def batch_setting_unit_params(df, model, unit, exclude=()):
    for para in df.index:
        if para in exclude: continue
        b = getattr(unit, para)
        lower = float(df.loc[para]['low'])
        upper = float(df.loc[para]['high'])
        dist = df.loc[para]['distribution']
        if dist == 'uniform':
            D = shape.Uniform(lower=lower, upper=upper)
        elif dist == 'triangular':
            D = shape.Triangle(lower=lower, midpoint=b, upper=upper)
        elif dist == 'constant':
            continue
        else:
            raise ValueError(
                f'Distribution {dist} not recognized for unit {unit}.')

        su_type = type(unit).__name__
        if su_type.lower() == 'lagoon':
            su_type = f'{unit.design_type.capitalize()} lagoon'
        name = f'{su_type} {para}'
        model.parameter(setter=AttrSetter(unit, para),
                        name=name,
                        element=unit,
                        kind='coupled',
                        units=df.loc[para]['unit'],
                        baseline=b,
                        distribution=D)
Exemple #3
0
def baseline_uniform(baseline, ratio):
    return shape.Uniform(baseline * (1 - ratio), baseline * (1 + ratio))
Exemple #4
0
U101 = system.U101
D = baseline_uniform(2205, 0.1)


@param(name='Flow rate',
       element=U101,
       kind='coupled',
       units='dry U.S. ton/day',
       baseline=2205,
       distribution=D)
def set_feedstock_flow_rate(rate):
    U101.feedstock_flow_rate = rate


D = shape.Uniform(0.9, 1)


@param(name='Plant uptime',
       element='TEA',
       kind='isolated',
       units='%',
       baseline=0.96,
       distribution=D)
def set_operating_days(uptime):
    lactic_tea.operating_days = 365 * uptime


special_price = {
    #     stream           distribution     min        max
    'feedstock': ('Uniform', (0.0529, 0.117)),
Exemple #5
0
           distribution=shape.Triangle(0.02, 0.048, 0.111),
           units='USD/kg')
def set_feedstock_price(price):
    cs.cornstover.price = price


@parameter(element='Operation',
           distribution=shape.Triangle(21, 30, 30),
           units='year')
def set_plant_life(plant_life):
    start = cs.cornstover_tea.duration[0]
    cs.cornstover_tea.duration = (start, start + plant_life)


@parameter(element='Operation',
           distribution=shape.Uniform(7920, 8610),
           units='hours')
def set_annual_operating_hours(annual_operating_hours):
    cs.cornstover_tea.operating_days = annual_operating_hours / 24.


@parameter(element='Economics',
           distribution=shape.Triangle(7, 10, 22),
           units='%')
def set_discount_rate(discount_rate):
    cs.cornstover_tea.IRR = discount_rate / 100.


# TODO: Find what type of depreciation schedules
# are used (hopefully MARCS) and whether a 30 yr
# depreciation is realistic for MARCS.
Exemple #6
0
__all__ = ('model_bsm1', 'model_2dv', 'model_ss', 'run_uncertainty',
           'analyze_timeseries', 'run_wdiff_init')

bsm1 = bm.bsm1
s = bm.system

#%%
# =============================================================================
# model with all uncertain variables
# =============================================================================

model_bsm1 = qs.Model(system=bsm1, exception_hook='raise')

########## Add Uncertainty Parameters ##########
param = model_bsm1.parameter
get_uniform_w_frac = lambda b, frac: shape.Uniform(lower=b * (1 - frac),
                                                   upper=b * (1 + frac))

cmps = s.cmps
PE = s.PE

b = 0.08
D = shape.Triangle(lower=0.04, midpoint=b, upper=0.12)


@param(name='Biomass N content i_XB',
       element=PE,
       kind='coupled',
       units='g N/g COD',
       baseline=b,
       distribution=D)
def set_i_XB(i):