特定時間の同じ部屋、喋りやすさ、子供(幼児、乳児)をきっかけに会話スタート、年代別他人へのアクセス(要先行研究)
地図を複数用意して、そこにエージェントをランダムウォークさせれば良い。
エージェントは、一日単位で滞留・移動を計算して、また複数の地図に展開すれば良い。
選択される地図は、エージェントの戦略となり、戦略は常時変更しても良い。
SCのコストは原則移動距離。あとは年齢によるコスト変化とか入れても良いかも。
江端智一のホームページ
特定時間の同じ部屋、喋りやすさ、子供(幼児、乳児)をきっかけに会話スタート、年代別他人へのアクセス(要先行研究)
地図を複数用意して、そこにエージェントをランダムウォークさせれば良い。
エージェントは、一日単位で滞留・移動を計算して、また複数の地図に展開すれば良い。
選択される地図は、エージェントの戦略となり、戦略は常時変更しても良い。
SCのコストは原則移動距離。あとは年齢によるコスト変化とか入れても良いかも。
横浜市統計書によると2022年度の1日平均乗降人員は18,339人(乗車人員:9,255人、降車人員:9,084人)である[3]。2020年度の1日平均乗降人員は16,535人であり[4]、京急線全72駅中30位。1988年をピークに乗降客数は減少し続けている。
https://ja.wikipedia.org/wiki/%E4%BA%AC%E6%80%A5%E5%AF%8C%E5%B2%A1%E9%A7%85
乗り場 系統 経由 行先 備考
富1 富岡西四丁目 横浜氷取沢高校 平日は朝夜のみ
富2 横浜氷取沢高校 能見台車庫前
富3 氷取沢 金沢文庫駅西口
富5 富岡西四丁目 富岡9期ニュータウン 朝夕のみ
富6 富岡西循環 京急富岡駅 日中のみ
main2.goで、ノードのコストが分からない場合でも対応できるように改良したもの。
package main
import (
"fmt"
"math"
)
type Node struct {
Name string
Value float64 // 各ノードに設定された数値 (負数の場合、この数値を無視する)
}
type Edge struct {
From *Node
To *Node
Weight float64
}
func main() {
/*
// ノードとエッジを初期化
nodeA := &Node{Name: "A", Value: 5}
nodeB := &Node{Name: "B", Value: 8}
nodeC := &Node{Name: "C", Value: 6}
nodeD := &Node{Name: "D", Value: 2}
nodeE := &Node{Name: "E", Value: 4}
*/
// ノードとエッジを初期化
nodeA := &Node{Name: "A", Value: 3}
nodeB := &Node{Name: "B", Value: -1} // 負数の場合無視
nodeC := &Node{Name: "C", Value: -1} // 負数の場合無視
nodeD := &Node{Name: "D", Value: 2}
nodeE := &Node{Name: "E", Value: -1} // 負数の場合無視
nodeF := &Node{Name: "F", Value: -1} // 負数の場合無視
nodeG := &Node{Name: "G", Value: 1}
/*
edges := []Edge{
{nodeA, nodeB, 2},
{nodeA, nodeC, 4},
{nodeB, nodeC, 1},
{nodeB, nodeD, 7},
{nodeC, nodeD, 3},
{nodeC, nodeE, 5},
{nodeE, nodeD, 2},
}
*/
edges := []Edge{ // A,B,C,D,E,Fの順で双方向をしてい
{nodeA, nodeB, 1},
{nodeB, nodeA, 1},
{nodeB, nodeC, 1},
{nodeC, nodeB, 1},
{nodeC, nodeD, 1},
{nodeD, nodeC, 1},
{nodeD, nodeE, 1},
{nodeE, nodeD, 1},
{nodeE, nodeF, 1},
{nodeF, nodeE, 1},
{nodeF, nodeG, 1},
{nodeG, nodeF, 1},
}
startNode := nodeG
targetNode := nodeA
// ダイクストラアルゴリズムを実行
shortestPath, totalWeight := dijkstra(startNode, targetNode, edges)
if shortestPath == nil {
fmt.Println("最短経路が見つかりませんでした。")
} else {
fmt.Printf("最短経路: %v\n", getNodeNames(shortestPath))
fmt.Printf("最短経路の総重み: %.2f\n", totalWeight)
}
fmt.Println(nodeA.Value)
fmt.Println(nodeB.Value)
fmt.Println(nodeC.Value)
fmt.Println(nodeD.Value)
fmt.Println(nodeE.Value)
fmt.Println(nodeF.Value)
fmt.Println(nodeG.Value)
}
func dijkstra(startNode, targetNode *Node, edges []Edge) ([]*Node, float64) {
// ノード間の最短距離を格納するマップを初期化
shortestDistances := make(map[*Node]float64)
// 各ノードの前のノードを格納するマップを初期化
predecessors := make(map[*Node]*Node)
// 最短距離を無限大で初期化し、開始ノードの最短距離を0に設定
for _, edge := range edges {
shortestDistances[edge.From] = math.Inf(1)
shortestDistances[edge.To] = math.Inf(1)
}
shortestDistances[startNode] = 0
// 訪問済みのノードを格納するセットを初期化
visitedNodes := make(map[*Node]bool)
// まだ訪問していないノードが残っている間ループ
for len(visitedNodes) < len(shortestDistances) {
// 未訪問のノードの中から最短距離のノードを選択
currentNode := getClosestUnvisitedNode(shortestDistances, visitedNodes)
// ノードがない場合やターゲットノードに到達した場合は終了
if currentNode == nil || currentNode == targetNode {
break
}
for _, edge := range edges {
if edge.From == currentNode {
if edge.To.Value < 0 { // -1などの負数が入っていたら、更新してしまう
edge.To.Value = currentNode.Value // 下のif文を通す為の手続(書き換えても大丈夫かな(今のところ大丈夫そうだけど))
}
if edge.To.Value >= currentNode.Value { //
distance := shortestDistances[currentNode] + edge.Weight
if distance < shortestDistances[edge.To] {
shortestDistances[edge.To] = distance
predecessors[edge.To] = currentNode
}
}
}
}
// このノードを訪問済みとしてマーク
visitedNodes[currentNode] = true
}
// 最短経路を復元
shortestPath := make([]*Node, 0)
currentNode := targetNode
for currentNode != nil {
shortestPath = append([]*Node{currentNode}, shortestPath...)
currentNode = predecessors[currentNode]
}
// 最短経路の総重みを計算
totalWeight := shortestDistances[targetNode]
return shortestPath, totalWeight
}
func getClosestUnvisitedNode(distances map[*Node]float64, visitedNodes map[*Node]bool) *Node {
minDistance := math.Inf(1)
var closestNode *Node
for node, distance := range distances {
if !visitedNodes[node] && distance < minDistance {
minDistance = distance
closestNode = node
}
}
return closestNode
}
func getNodeNames(nodes []*Node) []string {
names := make([]string, len(nodes))
for i, node := range nodes {
names[i] = node.Name
}
return names
}
昨夜の大掃除で、長女に使っていたiPod(×iPhone, ×iPad)がでてきました。
実験用として使えるかなぁ、とか考えて、最充電してみたら動くことは確認してみたのですが、『アクティベーションロックの解除』でハマりました。
そこで、家族全員に協力を要請することになりました。
まず、長女本人が覚えていないAppleのアカウントをハックする為に、過去に作った家族全員用の暗号表を解読して、アカウントの解除(他人がやれば、"アカウントの乗っ取り"という)というところまで持ち込んだのですが、別アカウントであるらしいことが分かりました(ここまでのハッキングの努力が水の泡)
この別アカウントについて、長女に問い合わせたのですが「分からん」と言われ、仕方がないのでカスタマーセンターに連絡しました。
シリアル番号は分からないか、と言われて、iPod本体を探してみたところ、『もの凄い小さな文字』のシリアル番号を見つけました。
拡大鏡のメガネでも視認できなかったので、iPhoneで撮影したものを拡大して確認できました。
(言うまでもありませんが、表示したシリアル番号は改竄済みです)
これでシリアル番号は確認できたのですが、今度は「購入店の購入履歴はあるか」と言われました。
もちろん、そんなものあるわけないと思いましたので「それでは、このアクティベーションは不可能、ということですね」と諦めたように呟いて電話を切りました。
『やれやれ、ここまでか』と、iPodを廃棄物用のバスケットに放り込もうとしたところで、嫁さんが、2010年のレシート持って私の部屋にやってきました。
再度、カスタマセンタに電話して、オペレータのタケダさんと協力しながら、情報の入力を続けました。
購入日、購入金額、店舗名、店舗の住所、電話番号、領収書と保証書の写真撮影と送付・・・
先程、申請処理を完了しました。
私、別段、このiPodがどうしても必要という訳ではなく、今、本当に忙しくて死ねるというくらいの状況なのですが ――なんと言うんですねえ、これがダンジョンRPGゲームのようなものでしょうか(私、ゲームやったことないので知らないのですが)。
オペレータさんと会話続けながら、この画面が出てきた時に、思わずガッツポーズしてしまいました。
いえ、本当に忙しいんです。こんなことやっている場合じゃないんです。
あ、今、Amazonから、時計交換用の電池が届いたみたいです・・・仕方ないなぁ・・・
「そこに怪我人がいれば、助けるのが医者だ」と「そこに動かない時計があれば、動かすのがエンジニアだ」というセリフが等価なのかは分かりませんが ――
階段に時計が落ちていました。少なくとも私のものではありません。
次女が、面接の直前に、100均で購入したとかいう話を聞いていたので、多分「それ」だろうと思います。
見たところ、どうやら電池切れのようです。
「そこに怪我人がいれば、助けるのが医者だ」と「そこに動かない時計があれば、動かすのがエンジニアだ」というセリフが等価なのかは分かりませんが ――
ともあれ、今の私は、私は、1/5日の発表資料の作成と、本日届いた重さ5kgのブリの解体で疲れ果てていたのです。
やらなければならない作業は、山ほどありますが、ちょっとだけ・・・といいながら、時計の解体をやっていました。
時計の裏の金属には、とっかかりがなく、明らかに「使い捨て」と割りきった商品であることは分かりましたが、精密ドライバーの一番小さなマイナスドライバーを使って抉じ開けました(傷くらいはついても良かろう、と割りきって)。
電池が小さい ―― 型式が視認できないので、iPhoneで拡大して撮影しました。
この電池(SR626)の在庫はない ―― 仕方がないので、Amazonで発注しました。
明日届く電池を1個だけで、一番安いものは、これでした。
この時計、明日には再起動するだろうと思います。
-----
動き出しました。
左は4000円の私の愛用の時計、右が今回電池交換をして動きだしたダイソーの900円の時計です。
(900円時計は、次女が、面接の時に時計を忘れて、あわてて購入したもの、だそうです)
腕時計は、その人の「格」を示すものだそうですが ―― まさに、これらの時計は、私の「格」を示していると思います。
『時計バンドが安っぽい』と言われましたので、バンドも交換しました(16mm)。
もう一つのクロック(CASIO Wave Ceptor)も同じもの(18mm)を付けています。
会社から、セキュリティ対策の指示がでると心底うんざりします。
I am genuinely sick and tired of receiving instructions from the company about security measures.
(1)まず、資料の内容が分からない。一体何を目的に何がしたいのかがさっぱり分かりません。
(1) First of all, I don't understand what the material is about. I have no idea what they want to do for what purpose.
(2)一発で、マニュアル通りに上手く設定できた試しがない。
(2) According to the manual, I have never been able to set it up successfully in one shot.
(3)設定後に、パソコンを再起動を試みると、かなり高い確率で失敗し、最悪の場合、システムが全部壊れることもある。元の状態に戻すことすらできない。
(3) After setting up, attempts to restart the computer fail pretty, and in the worst case, the entire system can be destroyed. It is not even possible to restore the system to its original state.
ちなみに、これは『ITエンジニア』である私の話です。
By the way, this is my story as an 'IT engineer.'
そうでない人にとっては、このような指示は『悪夢』そのものでしょう。
Such instructions would be a 'nightmare' for those who do not.
-----
このような複雑な設定作業を、エンドユーザに押し付ける ―― これは、『エンジニア集団の会社』だからでしょうか?
Is it because this is a "company of engineers" that forces the end user to go through such a complicated setup process?
それなら諦めるしかないと思いますが ―― それでも、私は本当に怖いです。
Then I guess I'll have to give up, but I'm still really scared.
というか、セキュリティ対策のオペレーションに失敗した場合、その日の仕事は止まりますし、下手すると数日から一週間くらい、何もできなくなる可能性があります。
Or rather, if a security operation fails, work stops for the day, and if it is not good, you may not be able to do anything for a few days or a week.
サイバー攻撃より、酷い。
It is worse than a cyber attack.
実際、私、何度か、そういう目に遭遇しています。
Several times, I have encountered that kind of thing.
-----
今後、さらに、サイバー攻撃は巧妙かつ高度になります。そして、多分、私達はそれについて行けなくなります。
In the future, cyber attacks will become even more sophisticated and advanced. And maybe we will not be able to keep up.
攻撃者は、攻撃だけに集中できますが、私たちは、防御だけに一日を費すことは許されません。
An attacker can focus only on the attack, but we cannot allow our day to be spent only on defense.
通常業務に加えて防御もやる、というのは、相当に過酷な労働環境です。
It is a very demanding work environment, doing defense and regular work.
-----
今後、この状態を続き、セキュリティ対策がさらに難しくなり、私たちがそれについていけなくなれば、
If this continues and security measures become even more difficult for us to keep up with in the future,
―― ハッカー(クラッカー)側の一人勝ちとなる世界が到来する
-- A world in which hackers (crackers) will be the sole winners.
ような気がします。
I feel so.
-----
で、対策なんですが、
So, the countermeasure is,
■パソコン、スマホ、インターネットを全て放棄する
- Abandon all computers, smartphones, and the Internet.
というのは無理としても、
Even if it is impossible to say,
■ダイヤルアップ接続の時代まで、時間を遡る
- Tracing back time to the days of dial-up connections
ところまで退行するのは、どうかなぁ、と、かなり真面目に考えています。
I am seriously thinking that we should regress to this point.
Y: Latitude: Lat :経度:南北 35.3715607
X: Longitude:Lng,Log:経度:東西 139.6268272,