2023年度全国大学生数理モデリングコンテストの問題D 胡羊飼育における空間利用アイデアの詳細解説 + Pythonソースコード(2)

昨日、問題 E の 1 問目と 2 問目の詳細な解説とソースコードを書きました。問題 E から始めたい場合は、私の記事を参照することをお勧めします。個人的には、問題 D よりも問題 E の方が良いと思いますモデリングに関しては、結局のところ、データと明確なモデリングのアイデアがあります。質問 E については、Python ソース コードを直接提供したので、直接実行できます。

2023年全国大学生数理モデリングコンテスト - 問題E+Pythonコードのソースコード解析の詳細説明icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/654941615 2023年全国大学生数理モデリングコンテスト 問題E+Pythonコードのソースコード解析の詳細説明( 2) icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/654977217必要に応じて、時間をかけてよく読んでください。簡単に自己紹介をさせていただきます。ブロガーは 4 年間モデリングに注力しており、大小さまざまな数十の数学モデリングに参加し、さまざまなモデルの原理、各モデルのモデリング プロセス、およびさまざまな問題分析方法を理解しています。彼は 10 回以上の数学モデリング コンテストに参加し、米国の 3 つのコンテストで 2 つの M 賞と 1 つの H 賞を受賞し、国内コンテストでは 2 位を受賞しました。将来モデリング コンテストに遭遇した場合は、私を気に入っていただければ、無料のアイデアといくつかのソース コードを提供できます。将来のデジタル モデリング コンテストにまだ時間がある限り、無料でオープンソースのアイデアを次のように書きます。できるだけ早く。ブロガーはデジタルとアナログのさまざまな競争を追い続けており、著者が丁寧に作成したコラムも推奨しています。このコラムの目的は、さまざまな数学モデルとコードを基礎ゼロですぐに使用できるようにすることであり、各記事には実践的なプロジェクトと実行可能なコードが含まれています。ブロガーは、デジタルおよびアナログのさまざまなコンテストに追いつきます。デジタルおよびアナログのコンテストごとに、ブロガーは、詳細なアイデアや完全に動作するコードに加えて、最新のアイデアやコードをこのコラムに書き込みます。

Quick Learning in One Article - Common Models for Mathematical Modeling icon-default.png?t=N7T8https://blog.csdn.net/master_hunter/category_10967944.html昨日、質問 D の最初の問題を解きました。多くの人がソース コードを求めてきました。正直に言うと、ソースコードを提供するのは本当に難しい ソースコードがたくさんある チームの直属の管理者は直接の CP​​ を気にしないので非常に危険である 大まかなフレームワークとカスタム関数を提供しましたが、それらをどのように組み合わせればよいのかまだわかりませんまったく方法がありません。参考としてここに示しているだけです。レビューの最初の質問は、コードの実装方法を示すことです。:

2023年全国大学生数学モデリングコンペティションの質問D 飼育下で胡羊を飼育するためのスペース利用アイデアの詳細な説明 + Pythonソースコードicon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/655008846

質問 1 の解決策:

def simulate_annual_slaughter(basic_ewes, ram, pen_capacity):
    slaughtered_lambs = 0

    for _ in range(365):
        pregnant_ewes = min(basic_ewes, pen_capacity["natural_mating"]["ewes"]) * pen_capacity["natural_mating"]["ram"]

        # 怀孕
        lambs_born = min(pregnant_ewes * 2, pen_capacity["pregnancy"]["ewes"])

        # 分娩和哺乳
        lactating_ewes = min(lambs_born, pen_capacity["lactation"]["ewes"])
        lactating_lambs = min(lambs_born * 2, pen_capacity["lactation"]["lambs"])

        # 羊只成长
        fattening_lambs = min(lactating_lambs, pen_capacity["fattening"]["lambs"])

        # 更新羊只数量
        basic_ewes = basic_ewes + lambs_born - lactating_ewes

        # 累积出栏羊只数量
        slaughtered_lambs += fattening_lambs

    return slaughtered_lambs

# 初始条件
basic_ewes = 200  # 基础母羊数量
ram = 2  # 种公羊数量

# 羊栏规格
pen_capacity = {
    "natural_mating": {"ram": 1, "ewes": 14},
    "pregnancy": {"ewes": 8},
    "lactation": {"ewes": 6, "lambs": 6},
    "fattening": {"lambs": 14}
}

slaughtered_lambs = simulate_annual_slaughter(basic_ewes, ram, pen_capacity)

print(f"每年预计出栏羊只数量:{slaughtered_lambs:.2f} 只")

# 初始条件
basic_ewes = 200  # 基础母羊数量
ram = 4  # 种公羊数量

# 阶段参数
natural_mating_period = 20
gestation_period = 149
lactation_period = 40
fattening_period = 210
rest_period = 20

# 羊栏规格
pen_capacity = {
    "natural_mating": {"ram": 1, "ewes": 14},
    "pregnancy": {"ewes": 8},
    "lactation": {"ewes": 6, "lambs": 6},
    "fattening": {"lambs": 14}
}
# 模拟中使用的羊栏数量
used_pens = {
    "natural_mating": 0,
    "pregnancy": 0,
    "lactation": 0,
    "fattening": 0
}
# 记录出栏羊只数量
slaughtered_lambs = 0

# 模拟一年的时间
for _ in range(365):

    # 自然交配
    pregnant_ewes = min(basic_ewes, pen_capacity["natural_mating"]["ewes"]) * ram

    # 怀孕
    lambs_born = min(pregnant_ewes * 2, pen_capacity["pregnancy"]["ewes"])

    # 分娩和哺乳
    lactating_ewes = min(lambs_born, pen_capacity["lactation"]["ewes"])
    lactating_lambs = min(lambs_born * 2, pen_capacity["lactation"]["lambs"])

    # 羊只成长
    fattening_lambs = min(lactating_lambs, pen_capacity["fattening"]["lambs"])

    # 更新羊只数量
    basic_ewes = basic_ewes + lambs_born - lactating_ewes
    ram = ram

    # 累积出栏羊只数量
    slaughtered_lambs += fattening_lambs
    # 记录使用的羊栏数量
    used_pens["natural_mating"] += 1
    used_pens["pregnancy"] += 1
    used_pens["lactation"] += 1
    used_pens["fattening"] += 1

# 所需羊栏数量
required_pens = max(used_pens.values())

# 现有羊栏数量
existing_pens = 112

# 计算羊栏缺口
pen_shortage = required_pens - existing_pens

# 输出结果
print(f"现有羊栏数量:{existing_pens} 栏")
print(f"所需羊栏数量:{required_pens} 栏")
print(f"羊栏缺口:{pen_shortage} 栏")

 

上記は参考用です。チームの問題解決の状況に応じて、対応するパラメータを変更できます。

質問2

質問 1 に基づいて、標準的な羊小屋 112 個についての具体的な生産計画 (雄羊および基本的な雌羊の繁殖時期と数、羊小屋の使用計画、年間屠殺される羊の頭数などを含む) が示されます。年間屠殺される羊の数が最も多いこと。

答え

質問の相関関係から、質問 1 と質問 2 は実際には、最適解を求めるための計算と逆最適化戦略とみなすことができます。そうすると、2番目の質問の考え方は、計算結果からは考えることができず、標準羊囲い数を満たす基本的な雌羊の頭数を、基本的な条件から段階的に計算して分析し、問題を再定義する必要があります。 :

繁殖雄羊と基礎雌羊の数がそれぞれxyであると仮定します。

各生殖周期における基本的な羊の生殖能力はyであるため、各周期で生産できる羊の数は 2×2× yとなります。

生殖周期の全長は 20+149+20+210=419 日です

したがって、1 年に残り 0.87 サイクルを実行できるため、年間に生産される羊の頭数は 0.87×2×y となります。

毎年 1,500 頭以上の羊が屠殺されるようにするには、次の方程式を解く必要があります。

0.87×2× y ≧1500

解はy≧861です

連続生産を実現する条件では、各羊小屋の稼働率をpとすると、次の条件を満たす必要があります。

  • 羊小屋を自然交配に使用する期間:p ×20日
  • 妊娠中に使用された羊:p×149日
  • 授乳用羊小屋:p×40日
  • 子羊の肥育期間に使用される羊:p ×210日
  • 羊の休眠期間:(1− p)×20日

以前の結果と組み合わせると、繁殖雄羊と基礎雌羊の適切な数を決定できます。この数値は、年間に屠殺される羊の範囲を推定するために屠殺される羊の数をシミュレートするために使用されます。

# 计算一个繁育周期的总长度
breeding_cycle_length = natural_mating_period + gestation_period + lactation_period + fattening_period

# 计算一年内可以进行的繁育周期数
num_cycles_per_year = days_in_year / breeding_cycle_length

# 问题 1: 确定养殖场种公羊与基础母羊的合理数量
# 基础母羊数量 (y) 至少需要满足每年出栏不少于1500只羊的条件
required_ewes = 1500 / (2 * num_cycles_per_year)

# 问题 2: 估算现有标准羊栏数量的缺口
# 确定每个羊栏的利用率
pen_capacity = num_pens * pen_utilization

# 一个羊栏在一个繁育周期内的总利用天数
pen_total_days = pen_utilization * breeding_cycle_length

# 一个羊栏的平均利用天数,考虑到空闲期
pen_average_days = pen_total_days + (1 - pen_utilization) * rest_period

# 可以养殖的基础母羊数量
feasible_ewes = pen_capacity * pen_average_days / breeding_cycle_length

# 问题 3: 估算年化出栏羊只数量的范围
# 计算实际每年产羊的数量
actual_annual_lambs = 2 * num_cycles_per_year * required_ewes

# 输出结果
print(f"问题 1: 养殖场需要至少 {int(required_ewes)} 只基础母羊。")
print(f"问题 2: 现有标准羊栏数量满足的基础母羊数量为 {int(feasible_ewes)} 只。")
print(f"问题 3: 年化出栏羊只数量的范围为 {int(actual_annual_lambs)} 只.")

質問 1: 農場には少なくとも 860 頭の基礎雌羊が必要です。

質問 2: 既存の標準羊囲い番号を満たす基本的な羊の数は 85 頭です。

質問 3: 羊の年間頭数の範囲は 1500 頭です。

具体的な生産計画を立てるには、次の要素を考慮する必要があります。

  1. 基礎雌羊と繁殖雄羊の組み合わせの数とタイミング。
  2. 羊小屋を使用すると、あらゆる段階の羊を適切に収容できるようになります。
  3. 年間屠殺される羊の数を最大限に増やす。

羊小屋内のスペースは、生産量を最大化するために可能な限り利用されます。

生産計画:

繁殖用の雄羊は基本的な雌羊とペアになります。

    • 交配時期:自然交配期の10日前
    • ラム数: 2
    • 基本羊頭数:100頭

妊娠:

  • 使用羊舎数:8(112羊舎/0.87)
  • ペンあたりの容量: 妊娠中の雌羊 8 頭
  • 妊娠周期:149日

出産と授乳:

  • 使用羊舎数:9(112羊舎/0.87)
  • ペンあたりの容量: 6 匹の雌羊とその子羊
  • 羊の総数: 雌羊 54 頭 + 子羊 54 頭
  • 配送サイクル: 40日

子羊の肥育期間:

  • 使用羊舎数:8(112羊舎/0.87)
  • ペンあたりの容量: 子羊 14 匹
  • 子羊の肥育サイクル:210日

サイクル:

子羊の肥育期間が終了すると、成羊は待機エリアに戻され、子羊は肥育エリアに移動し、次のサイクルに進みます。

将来モデリング コンテストに遭遇することがあれば、私を知っていただければ幸いです。無料のアイデアといくつかのソース コードを提供できます。将来のデジタル モデリング コンテストにまだ時間がある限り、間違いなく無料のオープン ソースを作成します。アイデアはできるだけ早く投稿してください。注目してください。そして、いいね! が執筆のモチベーションです。もっと詳しく知りたい場合は、ブロガーにお問い合わせください~~~~ また、著者が丁寧に作成したコラムもお勧めします。このコラムの目的は、さまざまな数学モデルとコードを基礎ゼロですぐに使用できるようにすることであり、各記事には実践的なプロジェクトと実行可能なコードが含まれています。ブロガーは、デジタルおよびアナログのさまざまなコンテストに追いつきます。デジタルおよびアナログのコンテストごとに、ブロガーは、詳細なアイデアや完全なコードに加えて、最新のアイデアやコードをこのコラムに書き込みます。

1 つの記事で簡単に学習 - 数学モデリングで一般的に使用されるモデルicon-default.png?t=N7T8https://blog.csdn.net/master_hunter/category_10967944.html

次の章では、E 問題の第 2 問と第 4 問のソースコードを更新します。

おすすめ

転載: blog.csdn.net/master_hunter/article/details/132780033