
武蔵野個別指導塾の特徴
高校情報I モデル化の考え方—目的から残す条件と省く条件を決めて限界を説明する|武蔵野個別指導塾

給水と漏水の仮定を変えて水量を計算し、容量を加えたときに予測が答えられる範囲を見直します。
よくあるのは、給水にかかる時間を計算した高校生が、省いた条件の影響を考えず、その答えを現実の水槽に当てはめる場面です。計算が正しくても、給水量が一定とは限りません。まず何を知りたいのかを決め、答えに関係する条件を選びます。
問われ方と答えの約束
モデル化の問題には、目的から必要な条件を選ぶ型、式や図から仮定を読み取る型、仮定を変えた結果と限界を説明する型があります。どの型でも、式の値を求める前に、その値が何を表すかを言葉にします。水槽の予測なら、水の量なのか、満水までの時間なのかを区別します。
ここでは自作の給水モデルを使います。水量はリットル、時間は分とし、時間0の水量と1分ごとの増減を決めます。時間は非負整数、量と給水量、漏水量は非負整数です。計算で水量が負になる条件は対象外としてエラーを返します。容量は基本モデルには入れず、満水を越えるかどうかは別に調べます。観測結果や実在の装置の性能を表した値ではありません。
予測を実際の判断に使うには、必要な条件を測り、予測と観測を比較する作業が必要です。ここで扱うのはその前段階の設計と、自作条件の下での計算です。予測値が出たことと現実に一致することは別の主張です。
何を残し、何を省くか
モデル化は、対象の特徴を目的に応じて選び、扱いやすい形で表すことです。対象そのものを小さくした模型に限らず、箱や矢印で関係を表す図的モデル、量の関係を式で表す数理的モデルもあります。給水の経路を矢印で描けば流れが見え、式にすれば時間ごとの水量を計算できます。両者は同じ目的に対する異なる表現です。
図1のように、目的を「数分後の水量を見積もる」とし、初めの水量、給水と漏水を残します。水槽の色や設置場所の名前は、この計算には入れません。ただし設置場所によって水温や給水の状態が変わるなら、その影響を別途検討する必要があります。省くとは存在しないと決めることではなく、今回の計算に含めないという選択です。

図1の矢印は、水量の増減を表します。入力側と出口側を同じ方向に足すのではなく、漏水は水量から引きます。残した条件でも「毎分同じ量が入る」「毎分同じ量が漏れる」といった仮定を置いて初めて、同じ増減を繰り返せます。
ある時点の量と関係だけを表すものを静的モデル、時間に沿う変化を表すものを動的モデルと呼びます。水槽の現在量だけの図は静的な表現、各分の水量の推移は動的な表現です。同じ対象でも、目的によってどちらも使えます。
入力と規則が同じなら結果が決まるものを確定モデルと呼びます。給水や漏水が固定の今回の式は確定モデルです。一方、故障の有無などを確率で表す確率モデルでは、同じ条件で試しても結果が変わりえます。確率を使えば必ず現実に近づくわけではなく、確率自体の根拠が必要です。ここでは乱数による予測は行いません。
基本例題:3分後の水量
初めに8リットル入った水槽へ毎分5リットルを入れ、毎分2リットルが漏れると仮定します。給水と漏水は各分に定量ずつ生じ、途中で水が負にならないものとします。3分後の水量を整数のリットルで求め、途中の値も示してください。
1分の増加は5から2を引いた3リットルです。初めの8に3を3回加えるので、手計算では17リットルです。図2のように、時間0から1分ずつ進むたびに水量が3増えます。図の数値は実測ではなく、問題で決めた条件から得た予測です。

図2の最後の17は、初めの8に給水15を足し、漏水6を引いた値とも一致します。容量を決めていないため、この数値から水槽があふれないとは言えません。満水に関する判断には容量と、あふれた水の扱いが必要です。
次の自作プログラムは、初期量、毎分の給水量、毎分の漏水量、分数を受け取り、時間0を先頭とする水量のリストを返します。途中で負になる場合は文字列「エラー」を返します。リストの添字は0始まりで、添字が経過分数に対応します。
def water(start, supply, leak, minutes):
if any(type(x) is not int or x < 0 for x in (start, supply, leak, minutes)):
return "エラー"
levels = [start]
for minute in range(minutes):
next_level = levels[-1] + supply - leak
if next_level < 0:
return "エラー"
levels.append(next_level)
return levels
print(water(8, 5, 2, 3))
1行目で関数名と4つの入口を決めます。2行目は整数でない値や負の値を調べ、3行目で不正な入力を知らせます。4行目は時間0の水量を記録します。5行目は指定された分数だけ反復します。6行目は直前の水量に給水を足し漏水を引きます。7、8行目は途中で水量が負になる条件を拒み、9行目で適切な次の値を末尾に加えます。10行目は記録を返し、最後の行は例題の入力で呼び出して表示します。
反復の前にリストには時間0があり、各回の終了後にはその時点までの水量が順に入ります。各回で指定の増減を1回加えるため、この関係は次の回にも保たれます。反復は指定の非負整数回で終わり、正常終了ならリストの長さは分数に1を足した数です。有限の例の実行とは別に、このことが処理の成立理由です。
Python 3.14.8で入力を8、5、2、3とした実行の期待出力と実際の出力はいずれも次のとおりです。
[8, 11, 14, 17]
仮定を変えると何が変わるか
標準例題として、基本例題の漏水量を毎分1リットルに変え、ほかは同じとします。3分後の水量と基本例題との差を整数のリットルで答えます。1分の増加は4なので、手計算の推移は8、12、16、20です。実行した water(8, 5, 1, 3) の期待値と実際の出力は [8, 12, 16, 20] でした。差は3リットルで、毎分1リットルずつ漏水が減った3分分と一致します。
この比較で変えたのは漏水量です。給水量と初期量も同時に変えると、差の原因を漏水量だけに帰せません。仮定を1つずつ変えれば、どの条件が結果に影響したかを読み取りやすくなります。ただし現実では条件が連動する可能性もあるため、独立に変えた結果だけで実際の差を断定しません。
発展例題では基本例題に容量16リットルを追加します。水量の計算規則は変えず、各分の終わりに容量を超えるか調べます。初めて超える分数を整数で答え、超えなければ「なし」と答えます。時間0も検査対象です。先ほどの推移8、11、14、17と照合すると、初めて超えるのは3分後です。16と等しい場合は「超える」に含めません。
これはあふれた後の水量を正確に表すモデルではありません。容量を超える予測を警告する目的に限って使います。実際の水槽内の量を追うなら、容量を超えた分をどう扱うかという新たな規則が必要です。容量を付け加えると、同じ給水の式でも答えられる問いと、その意味が変わります。
食い違いを見つけて修正する
誤って漏水を足すと、基本例題の1分後は15リットルになります。目的は水槽内の量なので、出口から出た2リットルを加えるのは逆です。図3のように、最初に手計算と食い違う1分後に戻ると、3分後の値だけを見るより原因を絞れます。

誤った規則では1分ごとに7増え、推移は8、15、22、29です。図3の修正は漏水を引くことです。修正後の water(8, 5, 2, 3) を再実行すると [8, 11, 14, 17] となり、給水15と漏水6を初期量に戻して照合した結果とも一致します。偶然最後の値が合う場合もあるので、途中状態を比べることが役立ちます。
正常時と失敗時の確認をそれぞれ4件行います。次の各行は入力、期待値、Python 3.14.8での実際の出力の順です。正常時の0分は反復0回、1分は単一更新、給水と漏水が同じ場合は一定、最後は水量がちょうど0になる境界です。
正常 (4, 3, 1, 0) [4] [4]
正常 (4, 3, 1, 1) [4, 6] [4, 6]
正常 (4, 2, 2, 2) [4, 4, 4] [4, 4, 4]
正常 (4, 1, 3, 2) [4, 2, 0] [4, 2, 0]
失敗 (4, 1, 3, 3) エラー エラー
失敗 (4, 1, 3, -1) エラー エラー
失敗 (4, 1, 3, 1.5) エラー エラー
失敗 (4, "故障", 0, 1) エラー エラー
最初の失敗は3分目に水量が負になる入力です。途中で計算可能だった値を完成した予測として返さず、全体をエラーとします。2件目は負の時間、3件目は分数でない時間、4件目は給水量のデータが壊れている場合です。0分や水量0は有効ですが、負の値はこの仕様では有効ではありません。
時間切れや外部の道具の故障も、予測値とは区別します。例えば測定器からの値を受け取る仕組みを追加するなら、時間内に値が届いた場合と、時間切れの場合をそれぞれ試します。故障を知らせる応答、読めない応答もそれぞれ試し、どちらも計算済みの水量として表示しない設計にします。このプログラムは外部の道具を呼ばないため、それらは追加時の試験設計であり、実機で実行した結果ではありません。エラーを0リットルと置き換えると、空の水槽と測定失敗が区別できなくなります。
練習:条件を決めてから答える
- 初めに6リットルあり、毎分4リットルの給水と毎分1リットルの漏水がある水槽を考えます。2分後の水量を整数のリットルで答えてください。
- 初めに9リットルあり、毎分3リットルが入り、毎分3リットルが出ます。4分後までの各分の水量を時間0からリストで答えてください。
- 初めに5リットルあり、毎分1リットルが入り、毎分3リットルが出ます。3分後まで計算する入力は上の関数で正常かエラーか答え、理由を示してください。
- 初めに2リットルあり、毎分3リットルが入り、漏水はありません。容量8リットルを超える最初の分を整数で答えてください。各分の終わりと時間0を検査します。
- 日ごとの水量を知る目的で、給水量の変動を省いて一定としたモデルを作りました。省いた条件が予測に及ぼす影響と、確かめる方法を1つずつ述べてください。
答えと照合
- 12リットルです。毎分3リットル増えるので推移は6、9、12です。2分間の給水8と漏水2を初期量に戻しても12です。
water(6, 4, 1, 2)の期待値と実際の出力は[6, 9, 12]です。 [9, 9, 9, 9, 9]です。毎分の増減は0なので、4回更新しても水量は9のままです。給水12と流出12もつり合います。water(9, 3, 3, 4)の期待値と実際の出力も同じリストでした。- エラーです。水量は5、3、1と進み、3分目は負になるため、非負の条件に反します。
water(5, 1, 3, 3)の期待値と実際の出力はともに「エラー」です。2分後の1リットルから差し引く量は2リットルなので、場面に戻しても不足します。 - 3分です。水量は2、5、8、11と進みます。2分後は容量と等しく、3分後に初めて超えます。
water(2, 3, 0, 3)の期待値と実際の出力は[2, 5, 8, 11]で、このリストを時間0から順に容量と比較しました。 - 例えば実際の給水が途中で減れば、一定とした予測は水量を多く見積もる可能性があります。各時刻の給水量を測って記録し、その変化を含めた予測と一定とした予測を比較します。漏水や容量など、比較に必要なほかの条件も揃えます。
要点
目的を決めてから、残す条件と省く条件を選びます。 図と式は対象を異なる形で表し、仮定によって意味が決まります。 条件を変えた差と、条件の外にある限界を区別します。 計算の正常時と失敗時を試し、予測を現実の値と混同しません。
説明が止まったときに見る場所
水量の式が立たないときは、給水と漏水の矢印に「増える」「減る」と書き、1分後の状態を口に出してみます。式が立っても予測をそのまま現実へ使ってしまうときは、一定とした量を指さし、変動したら答えがどちらに動くかを説明します。
個別指導では、初期値、1回の増減、各分の状態を処理表に書き、最初に食い違う行を一緒に確かめます。仮定を変えた理由と、まだ予測できないことを自分の言葉で結べれば、モデルの使える範囲が見えてきます。
読んで終わりにするか、ここから変えるか。
武蔵境駅徒歩30秒、講師1人に生徒1人の完全1対1。授業のあいだ、先生は隣を離れません。いまの詰まりを、無料相談でそのまま話してください。
まず15分だけ電話で話したい方は、無料電話相談(15分)から。塾からお電話を差し上げます。
本気になった日が、入塾の日。
お子様の教育、迷ったら「丸投げ」してください。必ず、期待以上の結果で返します。武蔵野で育む、武蔵境で学ぶ。
電話は年中無休。365日、24時間、お電話可能。




