Skip to main content

Solving physics problems by using Deep Learning

Project description

pinn-ics

PINN framework

Installation

    pip install pinn-ics

Latest version: 1.0.2

- New Features: `RAR algorithm` - generate data where the loss is higher

Syntax

Var Configuration

  • pinnics requires configurations for all variables.

    • VarSpec can import directly from pinnics

    • VarSpec object contains indentify character and limit of this variable.

  • Example:

    • Your solution depends on 2 domains: dimension and time.

    • Format u(x, t)

from pinnics import VarSpec

x = VarSpec('x', limit=(-1, 1))

t = VarSpec('x') # which defaults the limit of var t from 0 to 1

Function Definition

  • pinnics supports solving partial differential equation with the simple syntax.

    • Define a function with format:
    import numpy as np 
    
    import tensorflow as tf
    
    
    
    def pde_loss(res):
    
    
    
        # that presents u = u(x, t)
    
        u = res(x='x', t='t', num=10000)
    
    
    
        # u't + u * u'x = 3 * u''xx + sin(pi * x)
    
        return u.diff('t') + u() * u.diff('x') - 3 * u.diff('x', 'x') - tf.sin(np.pi * res.var['x'])
    
    • Whereas:

      • res is the required predefine argument, that will store all information.

      • u = res(x='x', t='t', num==10000) that represents u = u(x, t).

      • You can also use like that u = res(x=-1., t='t') that represents u = u(-1, t)

      • u() will return the value of u(x, t)

      • u.diff('x') returns the first order partial derivative of u(x, t) by x

      • u.diff('x', 'x') returns the second order partial derivative

      • res.var['x'] is the input value x for the model.

Network

  • pinnics provides a Network class to help people solve PDE problems by easy way.

Example:

from pinnics import NetWork



# define network to solve pde problem. 

net = NetWork(variables=[x, t], 

    losses = [pde_loss],

    layers=[2, 20, 20, 20, 1])



net.solve(epochs=10000, show_every=1000)
  • Whereas:

    • variables, losses, layers are required to create a new network.

      • variables is the list which contains all variables (VarSpec object) of model.

      • losses is the list which contains all equations (function defined in previous part).

      • layers is the list that represents network's architecture.

    • Non-required arguments:

      • activation_func: the activation function after each layer (expect result layer), default by tf.keras.activations.tanh

      • optimizer: the optimizer of model, default by tf.keras.optimizers.Adam()

      • initializer_func: the initializer for model's parameters, default by tf.keras.initializer.glorut_normal

    • net.solve(10000) will training and approximate the result.

After obtaining the model, you can get predict by using call() function.

x = np.linspace (-1, 1, 200).reshape(-1, 1)

t = np.linspace (0, 1, 200).reshape(-1, 1)

input = np.concatentate([x, t], axis=1)

y_pred = net(input)

A completely example

from pinnics import NetWork, VarSpec

import matplotlib.pyplot as plt

import numpy as np





t = VarSpec('t', limit=(0, 5))



def pde(res):

    u = res(t='t', num=1000)

    return u.diff('t', 't') + 3*u.diff('t') + 2*u()



def bound(res):

    u_pos = res(t=0, num=50)

    return u_pos() - 3



def bound_t(res):

    u_zero = res(t=0, num=50)

    return u_zero.diff('t') - 1



net = NetWork(variables=[t], losses=[pde, bound, bound_t], layers=[1, 20, 20, 1])

net.solve(epochs=1000, show_every=100)



plt.plot(net.history_loss)

plt.show()



x = np.linspace(0, 5, 300).reshape(-1, 1)

y = 7 * np.exp(-x) - 4 * np.exp(-2 * x)

y_pred = net(x)





plt.plot(x, y, label='truth', linewidth=3)

plt.plot(x, y_pred, label='predict', linewidth=3, linestyle='dashed')

plt.plot(x, y-y_pred, label='different') 

plt.show()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pinn-ics-1.0.2.tar.gz (6.8 kB view details)

Uploaded Source

File details

Details for the file pinn-ics-1.0.2.tar.gz.

File metadata

  • Download URL: pinn-ics-1.0.2.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for pinn-ics-1.0.2.tar.gz
Algorithm Hash digest
SHA256 714a8ebf0a325c59b68b582e2d0282794abcea66d430d9b5d3781d58bd17392a
MD5 5242ef6eea582a2ee7b8ed679fc94f2b
BLAKE2b-256 debe35404488bfbc8d5acb2f309ef53a740478db064adbf388cc8b8c080813bc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page