ダニエルキイスの「アルジャーノンに花束を」に登場する、主人公の結論「人為的に誘発された知能は、その増大量に比例する速度で低下する」を以下の2つのケースで、それぞれ微分方程式で示して下さい
今朝(深夜)にChatGPTと議論してグタグタな内容になっていました。
で、今朝、頭を整理して質問を完結に纏めました。(因みにLatexが面倒になったので、ChatGPTの回答のハードコピーを貼りつけるだけにしました(私が分かればいいので))。
ChatGPTの価値は、「回答」ではなく、「回答に至るプロセスで考えを纏めることができる」だなぁ、と実感しています。
ダニエルキイスの「アルジャーノンに花束を」に登場する、主人公の結論「人為的に誘発された知能は、その増大量に比例する速度で低下する」を以下の2つのケースで、それぞれ微分方程式で示して下さい
(1)人為的に誘発された知能が、時刻t=0において定数として与えられる場合
(2)人為的に誘発された知能が、時刻t=0から段階的に定量的(線形)に与え続けられる場合ただし、t=∞において、知能は、人為的に誘発される前の知能に戻る、として下さい。
やっと、私の頭の中でイメージできる数式(一般解)が出てきました。ChatGPT様々です。
特に最後の式は、『人為的に知能を誘発する技術や薬剤の処方をし続けたとしても、いつかは必ず知能が元のレベルに戻る』という(物語の中の)現実を示す式として現われています(微分方程式の条件として加えているので当然だけど)。
『人為的に誘発された知性』によって、この式を導出してしまった主人公の絶望感に、深く共感できてしまいました。
後日、エクセルかGnuplotで、この「アルジャーノン=ゴードン効果」をグラフで示してみたいと思います。
-----
ちなみに、私、こちらのコラムの最初のページで、『有用性の観点で言えば、三角関数より微分方程式の方が、はるかに役に立つ』という論旨を展開しています。
ただ、問題は、『微分方程式の一般解を導く為には、三角関数が必要となる(今回のケースでは指数関数だけで済みましたが)』という点が、やっかいなのです。
ホテルのロビーで経営者らしき方が「政治家は金融政策と財政政策の違いもわかってない」と嘆いていたのを思い出しました。金融経済の理解なしに政策の議論はできないはずですが、そうでもない現実に危うさを覚えます。
三角関数不要論については↓が参考になりました。https://t.co/ELdopnjBHx
— 石丸伸二 (@shinji_ishimaru) May 19, 2022
って、たった今気がついたのですが、石丸さんって「あの石丸さん」?
ちょっとビックリしています。
「アルジャーノンに花束を」について、以前から気になっていたことをChatGPTに質問してみた件
太字が江端の質問です(Latexが上手く表示できませんが、後日何とかします)
Latex表示のテスト(ここから)
[math jax] $$ e = \lim_{n \to +\infty} \biggl( 1+\frac{1}{n} \biggl)^{n} $$
$$ e = \lim_{n \to +\infty} \biggl( 1+\frac{1}{n} \biggl)^{n} $$
Latex表示のテスト(ここまで)
アルジャーノンに花束に、「人為的に生成された知能は、その生成された量に比例して減少する」というようなセリフがありました。正確なセリフを教えて下さい。
ChatGPT
「アルジャーノンに花束を」(原題:Flowers for Algernon)で言及されているセリフは以下の通りです:
「人工的に高められた知能は、上昇した度合いに比例して急激に衰える。」
このセリフは、チャーリー・ゴードンが自身の知能の急激な向上と、その後の衰えについて理解する過程で述べられます。このフレーズは、彼が知能の一時的な向上と、その後の不可避な衰えを予見し、受け入れることの難しさを反映しています。
4o
「人工的に高められた知能は、上昇した度合いに比例して急激に衰える。」 を微分方程式で表現して下さい
ChatGPT
「人工的に高められた知能は、上昇した度合いに比例して急激に衰える」という文を微分方程式で表現する場合、知能のレベル I(t)I(t)I(t) が時間 ttt に対してどのように変化するかを考えます。この文の解釈に基づいて、知能の衰えがその知能レベルに比例することを意味します。つまり、知能の減少速度が現在の知能レベルに比例するという形で表現できます。
この考えに基づいて、知能の時間に対する微分方程式は以下のようになります:
$$ \frac{dI}{dt} = -kI $$
ここで:
$$\frac{dI}{dt}$$ は知能の時間に対する変化率(衰えの速度)です。
$$I(t)$$ は時間$$t$$ における知能レベルです。
$$k$$ は比例定数で、知能の衰えの速さを決定します。$$k$$ は正の定数です。
この微分方程式は、知能の衰えがその知能レベルに比例していることを示しています。解くことで、知能の時間経過に伴う変化を表す式を得ることができます。
解法
この微分方程式を解くと、知能 $$I(t)$$は指数関数的に減少することがわかります。
$$\frac{dI}{dt} = -kI$$
この方程式を分離変数法で解くと、
dII=−k dt\frac{dI}{I} = -k \, dtIdI=−kdt
両辺を積分すると、
∫1I dI=−k∫dt\int \frac{1}{I} \, dI = -k \int dt∫I1dI=−k∫dt
ln∣I∣=−kt+C\ln |I| = -kt + Cln∣I∣=−kt+C
ここで CCC は積分定数です。両辺の指数を取ると、
∣I∣=e−kt+C|I| = e^{-kt + C}∣I∣=e−kt+C
I=Ce−ktI = Ce^{-kt}I=Ce−kt
この式は一般解を示しています。初期条件 I(0)=I0I(0) = I_0I(0)=I0 を適用すると、
I0=Ce0I_0 = Ce^0I0=Ce0
C=I0C = I_0C=I0
したがって、知能の時間経過に伴う変化は次のようになります:
I(t)=I0e−ktI(t) = I_0 e^{-kt}I(t)=I0e−kt
この解は、時間とともに知能が指数関数的に減少することを示しています。
4o
この方程式には「人工的に高められた知能」の内容が入っていないように思えます。
ChatGPT
ご指摘ありがとうございます。「人工的に高められた知能」の部分を考慮に入れて、さらに詳しいモデルを構築してみましょう。
「人工的に高められた知能」が徐々に減少するという現象を表現するために、知能の自然な状態を I0I_0I0 とし、人工的に高められた知能を I(t)I(t)I(t) として、それが時間とともに減少していく過程を考慮します。
仮定と設定
I0I_0I0 は元の知能レベル(自然な知能レベル)とします。
I(t)I(t)I(t) は時間 ttt における人工的に高められた知能レベルとします。
知能の減少速度は現在の知能レベルに比例し、知能の自然なレベルからの増分に対しても比例するものとします。
これを反映するために、次のような微分方程式を提案します:
dIdt=−k(I(t)−I0)\frac{dI}{dt} = -k (I(t) - I_0)dtdI=−k(I(t)−I0)
ここで:
dIdt\frac{dI}{dt}dtdI は知能の時間に対する変化率です。
I(t)I(t)I(t) は時間 ttt における知能レベルです。
I0I_0I0 は元の知能レベル(自然な知能レベル)です。
kkk は比例定数です。
解法
この微分方程式を解くと、次のような形式の解が得られます。
dIdt=−k(I(t)−I0)\frac{dI}{dt} = -k (I(t) - I_0)dtdI=−k(I(t)−I0)
まず、変数を分離します:
dII−I0=−k dt\frac{dI}{I - I_0} = -k \, dtI−I0dI=−kdt
両辺を積分します:
∫1I−I0 dI=−k∫dt\int \frac{1}{I - I_0} \, dI = -k \int dt∫I−I01dI=−k∫dt
ln∣I−I0∣=−kt+C\ln |I - I_0| = -kt + Cln∣I−I0∣=−kt+C
ここで CCC は積分定数です。両辺の指数を取ると:
∣I−I0∣=e−kt+C|I - I_0| = e^{-kt + C}∣I−I0∣=e−kt+C
I−I0=±eCe−ktI - I_0 = \pm e^C e^{-kt}I−I0=±eCe−kt
積分定数 eCe^CeC を C′C'C′ と置き換えると:
I(t)=I0±C′e−ktI(t) = I_0 \pm C' e^{-kt}I(t)=I0±C′e−kt
初期条件 I(0)=IinitialI(0) = I_{\text{initial}}I(0)=Iinitial を適用すると:
Iinitial=I0±C′I_{\text{initial}} = I_0 \pm C'Iinitial=I0±C′
したがって、定数 C′C'C′ は Iinitial−I0I_{\text{initial}} - I_0Iinitial−I0 となります。これにより、解は次のようになります:
I(t)=I0+(Iinitial−I0)e−ktI(t) = I_0 + (I_{\text{initial}} - I_0) e^{-kt}I(t)=I0+(Iinitial−I0)e−kt
この式は、時間とともに知能が自然なレベル I0I_0I0 に向かって指数関数的に減少する様子を示しています。
4o
これも変です。I_initial はI_0と同じ値なので、第二項の係数が0になりますよね。
ChatGPT
おっしゃる通りです。初期条件に関する考え方に誤りがありました。人工的に高められた知能が時間とともに減少する過程を適切にモデル化するためには、知能の初期値が自然な知能レベル I0I_0I0 とは異なることを明確にする必要があります。ここでは、人工的に高められた知能レベル ImaxI_{\text{max}}Imax を導入し、その変化を考慮します。
次のような状況を考えます:
I0I_0I0 は自然な知能レベル
ImaxI_{\text{max}}Imax は人工的に高められた知能レベルのピーク
I(t)I(t)I(t) は時間 ttt における知能レベル
人工的に高められた知能が時間とともに減少する過程を次のように表現します:
dIdt=−k(I(t)−I0)\frac{dI}{dt} = -k (I(t) - I_0)dtdI=−k(I(t)−I0)
初期条件として、I(0)=ImaxI(0) = I_{\text{max}}I(0)=Imax を考えます。
この微分方程式を解くと、
dIdt=−k(I(t)−I0)\frac{dI}{dt} = -k (I(t) - I_0)dtdI=−k(I(t)−I0)
変数分離して積分します:
dII−I0=−k dt\frac{dI}{I - I_0} = -k \, dtI−I0dI=−kdt
両辺を積分します:
∫1I−I0 dI=−k∫dt\int \frac{1}{I - I_0} \, dI = -k \int dt∫I−I01dI=−k∫dt
ln∣I−I0∣=−kt+C\ln |I - I_0| = -kt + Cln∣I−I0∣=−kt+C
ここで CCC は積分定数です。両辺の指数を取ると:
∣I−I0∣=e−kt+C|I - I_0| = e^{-kt + C}∣I−I0∣=e−kt+C
積分定数 eCe^CeC を C′C'C′ と置き換えると:
I−I0=C′e−ktI - I_0 = C' e^{-kt}I−I0=C′e−kt
初期条件 I(0)=ImaxI(0) = I_{\text{max}}I(0)=Imax を適用すると:
Imax−I0=C′I_{\text{max}} - I_0 = C'Imax−I0=C′
したがって、定数 C′C'C′ は Imax−I0I_{\text{max}} - I_0Imax−I0 となります。これにより、解は次のようになります:
I(t)=I0+(Imax−I0)e−ktI(t) = I_0 + (I_{\text{max}} - I_0) e^{-kt}I(t)=I0+(Imax−I0)e−kt
この式は、時間とともに知能が自然なレベル I0I_0I0 に向かって指数関数的に減少する様子を正しく表しています。
4o
人工的に加えられた知性を定数とするのは不自然です。人工的に加えられた知性も時間関数で増えるものとして下さい。ここでは簡単にするために、人工的に加えられた知性は線形増加する、としていいです。
ChatGPT
ご指摘ありがとうございます。人工的に加えられた知性が時間とともに線形に増加する場合を考慮して、より適切なモデルを構築します。
仮定と設定
I0I_0I0 は元の自然な知能レベルとします。
Ia(t)I_a(t)Ia(t) は時間 ttt における人工的に加えられた知能の量で、線形に増加すると仮定します。具体的には、Ia(t)=atI_a(t) = atIa(t)=at とします。
I(t)I(t)I(t) は時間 ttt における総合的な知能レベルで、自然な知能レベル I0I_0I0 と人工的に加えられた知能 Ia(t)I_a(t)Ia(t) の和です。
人工的に加えられた知能が時間とともに線形に増加し、総知能レベルが減少していく過程を次のように表現します:
I(t)=I0+Ia(t)I(t) = I_0 + I_a(t)I(t)=I0+Ia(t)
ここで Ia(t)=atI_a(t) = atIa(t)=at です。知能の減少速度が現在の知能レベルに比例することを考慮すると、次の微分方程式になります:
dIdt=−kI(t)\frac{dI}{dt} = -kI(t)dtdI=−kI(t)
この I(t)I(t)I(t) は自然な知能と人工的に加えられた知能の合計です:
I(t)=I0+atI(t) = I_0 + atI(t)=I0+at
したがって、この関係を微分方程式に代入すると:
dIdt=−k(I0+at)\frac{dI}{dt} = -k (I_0 + at)dtdI=−k(I0+at)
しかし、上記の形では、線形増加する人工知能の影響をうまくモデル化できないため、以下のように考えます。実際に、人工的に加えられた知能 Ia(t)=atI_a(t) = atIa(t)=at の効果を考慮しつつ、総合的な知能 I(t)I(t)I(t) の減少を考慮します。
微分方程式の構築
総合的な知能 I(t)I(t)I(t) が時間とともに減少する一方で、人工的に加えられた知能が線形に増加する場合を考えます。
知能の変化は次のようにモデル化できます:
dI(t)dt=ddt[I0+Ia(t)−βI(t)]\frac{dI(t)}{dt} = \frac{d}{dt}[I_0 + I_a(t) - \beta I(t)]dtdI(t)=dtd[I0+Ia(t)−βI(t)]
ここで Ia(t)=atI_a(t) = atIa(t)=at は人工的に加えられた知能、β\betaβ は減少率です。
したがって、全体の知能レベル I(t)I(t)I(t) は以下のような微分方程式に従います:
dI(t)dt=a−βI(t)\frac{dI(t)}{dt} = a - \beta I(t)dtdI(t)=a−βI(t)
解法
この微分方程式を解くと、総合的な知能 I(t)I(t)I(t) の時間に対する変化が得られます。
dI(t)dt=a−βI(t)\frac{dI(t)}{dt} = a - \beta I(t)dtdI(t)=a−βI(t)
変数分離して積分します:
dI(t)a−βI(t)=dt\frac{dI(t)}{a - \beta I(t)} = dta−βI(t)dI(t)=dt
積分すると:
∫1a−βI(t) dI=∫dt\int \frac{1}{a - \beta I(t)} \, dI = \int dt∫a−βI(t)1dI=∫dt
−1βln∣a−βI(t)∣=t+C-\frac{1}{\beta} \ln |a - \beta I(t)| = t + C−β1ln∣a−βI(t)∣=t+C
両辺に −β-\beta−β を掛けて整理すると:
ln∣a−βI(t)∣=−βt+C′\ln |a - \beta I(t)| = -\beta t + C'ln∣a−βI(t)∣=−βt+C′
ここで C′C'C′ は新たな積分定数です。指数を取ると:
∣a−βI(t)∣=e−βt+C′|a - \beta I(t)| = e^{-\beta t + C'}∣a−βI(t)∣=e−βt+C′
初期条件 I(0)=IinitialI(0) = I_{\text{initial}}I(0)=Iinitial を適用すると:
a−βIinitial=eC′a - \beta I_{\text{initial}} = e^{C'}a−βIinitial=eC′
これを C′′C''C′′ と置き換えると:
a−βI(t)=C′′e−βta - \beta I(t) = C'' e^{-\beta t}a−βI(t)=C′′e−βt
したがって、総合的な知能レベル I(t)I(t)I(t) は次のように表現されます:
I(t)=aβ+(Iinitial−aβ)e−βtI(t) = \frac{a}{\beta} + \left(I_{\text{initial}} - \frac{a}{\beta}\right) e^{-\beta t}I(t)=βa+(Iinitial−βa)e−βt
この解は、人工的に加えられた知能が線形に増加しつつ、全体の知能レベルが時間とともに減少する様子を示しています。
仮想RTSPカメラの作り方
/*
dummy_cam_0.2.c
■環境設定を行います。
sudo apt-get update
sudo apt-get install libgstrtspserver-1.0-dev
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH
"192.168.1.11.mp4"というmp4ファイルを用意しておいて下さい。
■プログラムをコンパイルして実行するには、以下のコマンドを使用します:
gcc -o dummy_cam_0.2 dummy_cam_0.2.c `pkg-config --cflags --libs gstreamer-1.0 gstreamer-rtsp-server-1.0`
./dummy_cam_0.2 -r rtsp://127.0.0.1:8554/test -f 192.168.1.11.mp4
■また、ヘルプメッセージを表示するには、以下のコマンドを使用します:
./dummy_cam_0.2 -h
■稼動確認環境
(車上) 192.168.101.30
cam@cam-desktop:~/cpp/src$ ./dummy_cam_0.2
cam@cam-desktop:~/cpp/src$ ./abc_vtp_0.1 -i 192.168.101.10 -p 38089 -r rtsp://127.0.0.1:8554/test
(地上) 192.168.101.10
pt@pt-desktop:~/go/src$ more srt_rtsp_server_38089.sh
#!/bin/bash
gst-launch-1.0 srtsrc uri=srt://:38089 keep-listening=true ! decodebin ! autovid
eosink
*/
#include <gst/gst.h>
#include <gst/rtsp-server/rtsp-server.h>
#include <stdio.h>
#include <string.h>
void print_usage(const char *prog_name) {
g_print("Usage: %s -r [RTSP_URL] -f [MP4_FILE]\n", prog_name);
g_print("Default RTSP_URL: rtsp://127.0.0.1:8554/test\n");
g_print("Default MP4_FILE: 192.168.1.11.mp4\n");
g_print("Example: %s -r rtsp://127.0.0.1:8554/test -f 192.168.1.11.mp4\n", prog_name);
}
int main(int argc, char *argv[]) {
GMainLoop *loop;
GstRTSPServer *server;
GstRTSPMountPoints *mounts;
GstRTSPMediaFactory *factory;
const char *default_url = "rtsp://127.0.0.1:8554/test";
const char *default_mp4 = "192.168.1.11.mp4";
const char *rtsp_url = default_url;
const char *mp4_file = default_mp4;
char path[256] = "/test";
char service[6] = "8554"; // ポート番号のデフォルト値
for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-h") == 0) {
print_usage(argv[0]);
return 0;
} else if (strcmp(argv[i], "-r") == 0 && i + 1 < argc) {
rtsp_url = argv[++i];
// RTSP URLのポート番号とパス部分を抽出
const char *url_port = strchr(rtsp_url + strlen("rtsp://"), ':');
if (url_port != NULL) {
url_port++;
const char *url_path = strchr(url_port, '/');
if (url_path != NULL) {
strncpy(path, url_path, sizeof(path) - 1);
path[sizeof(path) - 1] = '\0'; // Null terminatorを追加
int port_length = url_path - url_port;
if (port_length < sizeof(service)) {
strncpy(service, url_port, port_length);
service[port_length] = '\0'; // Null terminatorを追加
}
}
}
} else if (strcmp(argv[i], "-f") == 0 && i + 1 < argc) {
mp4_file = argv[++i];
}
}
gst_init(&argc, &argv);
loop = g_main_loop_new(NULL, FALSE);
server = gst_rtsp_server_new();
gst_rtsp_server_set_service(server, service);
mounts = gst_rtsp_server_get_mount_points(server);
factory = gst_rtsp_media_factory_new();
char launch_string[512];
snprintf(launch_string, sizeof(launch_string),
"( filesrc location=%s ! qtdemux name=d d.video_0 ! queue ! rtph264pay pt=96 name=pay0 )",
mp4_file);
gst_rtsp_media_factory_set_launch(factory, launch_string);
// ループ設定を追加
//g_object_set(factory, "loop", TRUE, NULL);
gst_rtsp_mount_points_add_factory(mounts, path, factory);
g_object_unref(mounts);
gst_rtsp_server_attach(server, NULL);
g_print("Stream ready at %s with file %s\n", rtsp_url, mp4_file);
g_main_loop_run(loop);
return 0;
}
kobore.netからGmailへのメールで送信エラーが発生
読者さんからのメールに返信しようとしたのですが、エラーリターンが連発しました。エラーメールの文面を解析したら、どうやら、これが原因だったようです。
そりゃ、まあ、kobore.netなんぞという弱小ドメインを、Googleが怪しいと思うのは当然かもしれませんが(と、ちょっと拗ねてみる)
-----
kobore.netのドメインでのメールアドレスは、普段使いしておらず、また、別メールに転送されており、運が悪いとそこでフィルタリングがかけられて、見落としすることが多々あります。(定期的にフォルダのチェックはしておりますが)。
江端からの返信がない場合、しばらくお待ち下さい。思い出したころに、返信を差し上げることがあります(もし、見逃してしまったら、大変申し訳ありません)。
gst_videotestsrc_autovideosink.c
/*
gcc -o gst_videotestsrc_autovideosink gst_videotestsrc_autovideosink.c `pkg-config --cflags --libs gstreamer-1.0`
*/
#include <gst/gst.h>
int main(int argc, char *argv[]) {
GstElement *pipeline, *source, *sink;
GstBus *bus;
GstMessage *msg;
GError *error = NULL;
/* Initialize GStreamer */
gst_init(&argc, &argv);
/* Create the elements */
source = gst_element_factory_make("videotestsrc", "source");
sink = gst_element_factory_make("autovideosink", "sink");
/* Create the empty pipeline */
pipeline = gst_pipeline_new("test-pipeline");
if (!pipeline || !source || !sink) {
g_printerr("Not all elements could be created.\n");
return -1;
}
/* Build the pipeline */
gst_bin_add_many(GST_BIN(pipeline), source, sink, NULL);
if (gst_element_link(source, sink) != TRUE) {
g_printerr("Elements could not be linked.\n");
gst_object_unref(pipeline);
return -1;
}
/* Start playing */
gst_element_set_state(pipeline, GST_STATE_PLAYING);
/* Wait until error or EOS */
bus = gst_element_get_bus(pipeline);
msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, (GstMessageType)(GST_MESSAGE_ERROR | GST_MESSAGE_EOS));
/* Parse message */
if (msg != NULL) {
GError *err;
gchar *debug_info;
switch (GST_MESSAGE_TYPE(msg)) {
case GST_MESSAGE_ERROR:
gst_message_parse_error(msg, &err, &debug_info);
g_printerr("Error received from element %s: %s\n", GST_OBJECT_NAME(msg->src), err->message);
g_printerr("Debugging information: %s\n", debug_info ? debug_info : "none");
g_clear_error(&err);
g_free(debug_info);
break;
case GST_MESSAGE_EOS:
g_print("End-Of-Stream reached.\n");
break;
default:
/* We should not reach here because we only asked for ERRORs and EOS */
g_printerr("Unexpected message received.\n");
break;
}
gst_message_unref(msg);
}
/* Free resources */
gst_object_unref(bus);
gst_element_set_state(pipeline, GST_STATE_NULL);
gst_object_unref(pipeline);
return 0;
}
愚痴 : 最近、ラズパイに添付されるSDカードのサイズが大きい
クローン作るのに、10時間弱ですよ・・・(昔はよかった・・・(遠い目))
パワーポイントが落ちて、ファイルが紛失した時、C:\Users\tomoi\AppData\Roaming\Microsoft\PowerPoint\ の中のtmpファイルでなんとかした件
ここの最新のtmpはダメだったけど、その1つまえのtmpファイルを、どっかのディレクトリにもっていって、拡張子を、pptxにしたら復活した。
よかったー
が、このままではいかんので、ちゃんと設定することにした。(が、すでに設定されているみたいなんだよなー)
ジャーナル(IJSKM)に掲載されました Social Impact Simulation Including Social Capital, Based on Current Status of Multi-Agent Simulation
Social Impact Simulation Including Social Capital, Based on Current Status of Multi-Agent Simulation
https://www.iaiai.org/journals/index.php/IJSKM/article/view/834