4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Erlangを用いてアーランの損失式を計算

Last updated at Posted at 2018-05-17

情報通信の講義の中で出てきたアーランの損失式をプログラムとして作成したくなった時に、友人から「Erlangで作ったら?」と言われたので、Erlangで作りました。

Erlangとは

自分も今回初めてErlangに触れたのですが、ざっくり紹介してみます。
Erlangは通信会社機器メーカーのエリクソンが開発した、並行処理指向の関数型言語です。
他の言語との違いとしては、変数への代入は一度きりで、その変数の先頭は大文字でなければならないという決まりがあります。(小文字だとatomというものになるらしい)
また、for文やwhile文が存在しないため、繰り返しの処理は再帰を用いらなければなりません。

アーランの損失式とは

アーランの損失式は、下の式で表します。

B=\frac{\frac{a^s}{s!}}{\sum_{i=0}^{s}\frac{a^i}{i!}}

この式は、通信の際の呼損率B(相手が呼び出せない確率)を、単位時間あたりの保留時間である呼量aと通信回線数sから求める式です。

階乗

早速作成を始めましょう。
まず階乗を行う関数を作成しました。
Erlangは引数によって場合分けが可能なので、以下のように場合分けと再帰を用いて実装しました。

factorial.erl

factorial(0) ->
  1;

factorial(N) ->
  N * factorial(N - 1).

総和

分母で使用する総和を行うプログラムも、再帰と場合分けを用いてこのように実装しました。

sigma.erl
sigma(A,0) ->
  1;

sigma(A,S) ->
  T=power(A,S),
  F=factorial(S),
  (T / F) + sigma(A,S - 1).

結果

Erlangでアーランの損失式を作成できました。
ソースはgithubに上がっています。

まとめ

Erlangを初めて触りましたが、シンプルで使いやすかったです。
次は、Elixirなんかも触りたいと思ってます。

参考ページ
Erlang - Wikipedia (https://ja.wikipedia.org/wiki/Erlang)

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?