A Simplified Plant Growth Simulation Prototype

<Please mention the source if you wanna forward this article>

This work is completed as the final project for my GPGPU class.

This simple prototype is the implementation for paper ‘Self-organizing Tree Models for Image Synthesis’ by WKSABR (also refered as Palubicky09SIGG).

The key algorithm is the Apical Control in plant growth (Borchert-Honda Model).

Because of the limited time (about only 3 weeks, with another project paralleled at the same time), my plant growth model is quite simplified, the calculation scale is quite small – my application adopts only a 80*80*80 resolution while 800*800*800 will definitely look much better - and many useful techniques are not involved as texture.

Plant Growth Algorithm

Space Colonization

sc
(Pictures from ‘Palubicky 09 SIGGRAPH’)
 

* Shadow Propagation

sp 
(Pictures from ‘Palubicky 09 SIGGRAPH’)

The initial intention for shadow propagation is to simulate the shadow within the internodes/leaves/flowers so to make a more realistic lighting condition. Plus, we can use this shadow matrix to simulate ray-casting shadow.

* Bud Fate Calculation (Borchert-Honda Model)


            bh
bh1
(Pictures from ‘Palubicky 09 SIGGRAPH’)

* Gravity Effects

After we got the optimized shooting vector by Space Colonization and Light Condition, we can add gravity vector to simulate the gravity effects on internodes/leaves.

* Branch Diameter Calculation

    d = d1^n + d2 ^ n

d1 and d2 are child internodes of d. It is said this equation is invented by Leonardo da Vinci – what a genius!


GPU Acceleration

* Space Colonization & Shadow Propagation

The kernel function is executed based on each voxel – the gathering is much better for GPU.

* Ray-casting Shadow Calculation
 
Rays are independent with each other, and this leads to a perfect GPU application situation. But at last a Bi-Linear smooth is needed.

s1 s2

(Yes the right one is my final image – like a bunch of leek because of the over-simplified BH-model.)


Future Work

1. Shedding implement.

2. Texture Enabled – it will definitely make the final picture look much better.

3. Internode using cones so to smooth the nodes – if I don’t want to simulate a bamboo tree, it will be better to smooth the nodes.

4. A more completed Borchert-Honda Model. The current BH model is over simplified. A more complete BH-model will make my tree much more realistic.

5. A larger resolution, say 1024 * 1024 * 1024. My current resolution is 80*80*80 which makes my model more like a 80’s application. But for a larger resolution, I need to separate the kernel execution into several parts – too long execution time will make Windows Watch Dog crazy. It is a big topic though.

P.S. It is really a great pity that I don’t have enough time to refine this project, unless I would like to take it as my master thesis – a relatively complete model will result in a very pretty and realistic plant image ! (Please refer to the paper)
But I do have my plan for another project(s)… Yeah you will see…

 

<Please mention the source if you wanna forward this article>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
To price a barrier option on FX rate by Monte Carlo simulation, you can follow these steps: 1. Define the basic parameters of the barrier option, including the spot FX rate, strike price, option expiration date, barrier level, barrier type (up/down), barrier monitoring frequency, volatility, and risk-free rate. Store these parameters in variables. 2. Generate the simulated FX rate paths. Use a random number generator (such as the normal distribution) to generate a set of random shocks to the FX rate at each time step. Use these random shocks to simulate a set of possible FX rate paths for the option's life. Store these paths in a matrix. 3. Determine if the barrier has been breached for each simulated path. At each monitoring frequency, check if the FX rate has crossed the barrier level. If it has, take note of the time and location of the first breach. 4. Calculate the payoff for each simulated path. If the FX rate breached the barrier before the option expiration, the option expires worthless. If the FX rate did not breach the barrier before the option expiration, the option payoff is the maximum of 0 and the difference between the FX rate and the strike price. 5. Discount the payoff to the present value. Use the risk-free rate and the option's time to expiration to calculate the discount factor and present value for each simulated path. 6. Calculate the option price. Take the average of all the present values calculated in step 5 to get the option price. Here's an example of how to implement these steps in Python: ```python import numpy as np # Define basic parameters S0 = 1.2 # Spot FX rate K = 1.3 # Strike price T = 1 # Time to expiration B = 1.1 # Barrier level barrier_type = 'up' # Barrier type monitoring_freq = 10 # Barrier monitoring frequency sigma = 0.2 # Volatility r = 0.05 # Risk-free rate N = 10000 # Number of simulations dt = 1/252 # Time step # Generate the simulated FX rate paths ST = np.zeros((N, monitoring_freq+1)) ST[:,0] = S0 for i in range(N): for j in range(1, monitoring_freq+1): ST[i,j] = ST[i,j-1] * np.exp((r-sigma**2/2)*dt + sigma*np.sqrt(dt)*np.random.normal()) # Determine if the barrier has been breached for each simulated path breached = np.zeros(N, dtype=bool) time_to_breach = np.zeros(N) for i in range(N): for j in range(1, monitoring_freq+1): if barrier_type == 'up': if ST[i,j] > B: breached[i] = True time_to_breach[i] = j break else: if ST[i,j] < B: breached[i] = True time_to_breach[i] = j break # Calculate the payoff for each simulated path payoff = np.zeros(N) for i in range(N): if breached[i]: payoff[i] = 0 else: payoff[i] = max(0, ST[i,-1] - K) # Discount the payoff to the present value df = np.exp(-r*T) pv = payoff * df # Calculate the option price price = np.mean(pv) ``` This code generates random FX rate shocks at each time step to simulate possible FX rate paths for the option's life. It then checks if the barrier is breached for each path and calculates the payoff for each path. Finally, it discounts the payoff to the present value and calculates the option price as the average present value across all paths. Note that this is a simplified example and more advanced techniques may be required to get accurate option prices.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值