コード例 #1
0
ファイル: modelrefine.py プロジェクト: zutshi/S3CAMR
def cell_affine_models(cell, step_sim, ntrain, ntest, tol, include_err):
    """cell_affine_models

    Parameters
    ----------
    cell : cell
    step_sim : 1 time step (delta_t) simulator
    tol : each abs state is split further into num_splits cells
    in order to meet: modeling error < tol (module ntests samples)

    Returns
    -------
    pwa.SubModel()

    Notes
    ------
    """
    # XXX: Generate different samples for each time step or reuse?
    # Not clear!
    sub_models = []

    X, Y = getxy_ignoramous(cell, ntrain, step_sim)
    rm = RegressionModel(X, Y)
    X, Y = getxy_ignoramous(cell, ntest, step_sim)
    e_pc = rm.error_pc(X, Y) # error %
    if __debug__:
        print('error%:', e_pc)
    #error = np.linalg.norm(e_pc, 2)
    # error exceeds tol in error_dims
    error_dims = np.arange(len(e_pc))[np.where(e_pc >= tol)]

    if len(error_dims) > 0:
        err.warn('splitting on e%:{}, |e%|:{}'.format(
            e_pc, np.linalg.norm(e_pc, 2)))
        for split_cell in cell.split(axes=error_dims):
            sub_models_ = cell_affine_models(
                    split_cell, step_sim, ntrain, ntest, tol, include_err)
            sub_models.extend(sub_models_)
        return sub_models
    else:
        #print('error%:', rm.error_pc(X, Y))
        A, b = rm.Ab
        C, d = cell.ival_constraints.poly()
        e = rm.error(X, Y) if include_err else None
        dmap = pwa.DiscreteAffineMap(A, b, e)
        part = pwa.Partition(C, d, cell)
        sub_model = pwa.SubModel(part, dmap)
        if __debug__:
            print('----------------Finalized------------------')
    return [sub_model]
コード例 #2
0
ファイル: modelrefine.py プロジェクト: zutshi/S3CAMR
def cell_rel_affine_models(cell1, cell2, force, step_sim, ntrain, ntest, tol, include_err):
    """cell_affine_models

    Parameters
    ----------
    cell1 : source cell
    cell2 : target cell
    step_sim : 1 time step (delta_t) simulator
    tol : each abs state is split further into num_splits cells
    in order to meet: modeling error < tol (module ntests samples)

    Returns
    -------
    pwa.SubModel()

    Notes
    ------
    """
    # XXX: Generate different samples for each time step or reuse?
    # Not clear!
    sub_models = []

    X, Y = getxy_rel_ignoramous(cell1, cell2, force, ntrain, step_sim)
    # No samples found => no model
    training_samples_found = len(X) != 0
    if not training_samples_found:
        return [None]
    rm = RegressionModel(X, Y)
    X, Y = getxy_rel_ignoramous(cell1, cell2, True, ntest, step_sim)
    testing_samples_found = len(X) != 0
    # If valid samples are found, compute e_pc (error %) and dims
    # where error % >= given tol
    if testing_samples_found:
        e_pc = rm.error_pc(X, Y)
        error_dims = np.arange(len(e_pc))[np.where(e_pc >= tol)]
    # Otherwise, forget it!
    else:
        e_pc = None
        error_dims = []

    if __debug__:
        print('error%:', e_pc)

    if len(error_dims) > 0:
        err.warn('splitting on e%:{}, |e%|:{}'.format(
            e_pc, np.linalg.norm(e_pc, 2)))
        for split_cell1 in cell1.split(axes=error_dims):
            sub_models_ = cell_rel_affine_models(
                    split_cell1, cell2, False, step_sim, ntrain, ntest, tol, include_err)
            sub_models.extend(sub_models_)
        return sub_models
    else:
        A, b = rm.Ab
        C1, d1 = cell1.ival_constraints.poly()
        C2, d2 = cell2.ival_constraints.poly()

        e = rm.error(X, Y) if (include_err and testing_samples_found) else None

        dmap = rel.DiscreteAffineMap(A, b, e)
        part1 = rel.Partition(C1, d1, cell1)
        part2 = rel.Partition(C2, d2, cell2)
        sub_model = rel.Relation(part1, part2, dmap)
        if __debug__:
            print('----------------Finalized------------------')
    return [sub_model]