信者獲得&洗脳シミュレーションプログラム
信者獲得&洗脳シミュレーションプログラム
package main
import (
"fmt"
"math/rand"
)
type person struct {
number int // 番号
mental_strength float64 // 勧誘に屈しない強さ
religious_devotion float64 // 信仰力
church int //教会フラグ
}
var p_array []*person // personの配列2
var (
p_num = 0
)
func person_create() *person {
p := new(person)
p.number = p_num
p_num++ // 生成された順番に番号を付けていく
p.mental_strength = rand.Float64() // 勧誘を断わる強さ
p.religious_devotion = 0 // 信仰力最初は"0"
p.church = 0 // 教会フラグ
p_array = append(p_array, p) // 配列に放り込む
return p
}
func (p *person) person_destroy() {
for index, v := range p_array {
if v == p {
p_array = append(p_array[:index], p_array[index+1:]...)
break
}
}
p = nil //これでいいのかな? ガーベージコレクションが消してくれる、と聞いているが
}
type agent struct {
number int // 番号
invitation_power float64 // 勧誘力
}
var a_array []*agent // agentの配列
var (
a_num = 0
)
func agent_create() *agent {
a := new(agent)
a.number = a_num
a_num++ // 生成された順番に番号を付けていく
a.invitation_power = 0.3 + 0.7*rand.Float64() // 勧誘力
a_array = append(a_array, a) // 配列に放り込む
return a
}
func (a *agent) agent_destroy() {
for index, v := range a_array {
if v == a {
a_array = append(a_array[:index], a_array[index+1:]...)
break
}
}
a = nil //これでいいのかな? ガーベージコレクションが消してくれる、と聞いているが
}
func (p *person) meet_agent(a *agent) {
if p.mental_strength < a.invitation_power {
p.religious_devotion += a.invitation_power * 0.1 // エージェントの説得によって信仰心が微増
p.mental_strength -= a.invitation_power * 0.1 // エージェントの説得によって心理障壁が微減
if p.religious_devotion > 1.0 {
p.religious_devotion = 1.0
}
if p.mental_strength < 0.0 {
p.mental_strength = 0.0
}
}
}
func main() {
for i := 0; i < 1000; i++ {
person_create()
}
fmt.Println("======p_array=========")
for _, p := range p_array {
fmt.Println(p.number, ",", p.mental_strength, ",", p.religious_devotion)
}
for i := 0; i < 5; i++ {
agent_create()
}
fmt.Println("======a_array=========")
for _, a := range a_array {
fmt.Println(a.number, ",", a.invitation_power)
}
for i := 0; i < 365; i++ { // 1年間の勧誘
for _, p := range p_array {
//fmt.Println(index, ":", v, v.number, v.mental_strength)
for _, a := range a_array {
if rand.Float64() < 0.001 {
p.meet_agent(a)
}
}
}
}
fmt.Println("=====p_array after 365days==========")
for _, p := range p_array {
fmt.Println(p.number, ",", p.mental_strength, ",", p.religious_devotion)
}
fmt.Println("====count2===========")
count := 0
for _, p := range p_array {
if p.religious_devotion > 0.2 {
p.church = 1 //教会フラグを"1"に変項
count++
fmt.Println(p.religious_devotion)
}
}
fmt.Println(count)
for i := 0; i < 365; i++ { // 2年目の勧誘
for _, p := range p_array {
//fmt.Println(index, ":", v, v.number, v.mental_strength)
for _, a := range a_array {
if p.church == 1 && rand.Float64() < 0.005 {
p.meet_agent(a)
}
}
}
}
fmt.Println("=====p_array after 365days x 2==========")
for _, p := range p_array {
if p.church == 1 {
fmt.Println(p.number, ",", p.mental_strength, ",", p.religious_devotion)
}
}
}
出力結果(エクセルファイル) → cult.xlsx