内燃機関の排気系に配置され理論空燃比近傍で出力特性が変化するO2センサを備えた船外機用内燃機関の空燃比を制御する空燃比制御装置であって、前記内燃機関の運転状態と学習値とに基づいて、空燃比を目標空燃比に制御するオープンループ制御手段と、前記オープンループ制御手段により目標空燃比を所定の希薄側の空燃比に制御している状態から、目標空燃比を理論空燃比に移行させ、前記O2センサの出力に基づいて決定されるフィードバック補正係数を用いて空燃比を理論空燃比にフィードバック制御するフィードバック制御手段と、前記フィードバック制御手段によるフィードバック制御において、前記O2センサの出力がリーン側からリッチ側およびリッチ側からリーン側に反転するときのフィードバック補正係数の平均値を算出する平均値算出手段と、前記平均値算出手段により算出された平均値が略一定になったときの平均値に基づいて学習値を算出する学習値算出手段と、を有することを特徴とする船外機用内燃機関の空燃比制御装置。前記平均値算出手段は、前記O2センサの出力がリーン側からリッチ側およびリッチ側からリーン側に反転するときの過去の所定回数分のフィードバック補正係数を用いて平均値を算出することを特徴とする請求項1に記載の船外機用内燃機関の空燃比制御装置。前記学習値算出手段は、前記平均値算出手段により算出された過去の所定回数分のフィードバック補正係数の平均値が、それよりも以前に算出された過去の所定回数分のフィードバック補正係数の平均値と略同一になったときに、略同一になったときの平均値に基づいて学習値を算出することを特徴とする請求項2に記載の船外機用内燃機関の空燃比制御装置。前記学習値算出手段は、前記平均値算出手段により算出された過去の所定回数分のフィードバック補正係数の平均値と、それよりも以前に算出された過去の所定回数分のフィードバック補正係数の平均値との間の変化率が所定の変化率よりも低くなったときに、低くなったときの平均値に基づいて学習値を算出することを特徴とする請求項1または2に記載の船外機用内燃機関の空燃比制御装置。前記学習値算出手段は、複数のエンジン運転領域毎に学習値を算出することを特徴とする請求項1ないし4の何れか1項に記載の船外機用内燃機関の空燃比制御装置。前記エンジン運転領域は、エンジン回転数域により設定されることを特徴とする請求項5に記載の船外機用内燃機関の空燃比制御装置。前記オープンループ制御手段は、前記学習値算出手段によって最も低回転数域で学習された学習値を、前記低回転数域よりも更に低いエンジン回転数域に用いて、空燃比を目標空燃比に制御することを特徴とする請求項6に記載の船外機用内燃機関の空燃比制御装置。前記オープンループ制御手段は、前記学習値算出手段によって最も高回転数域で学習された学習値を、前記高回転数域よりも更に高いエンジン回転数域に用いて、空燃比を目標空燃比に制御することを特徴とする請求項6に記載の船外機用内燃機関の空燃比制御装置。内燃機関の排気系に配置され理論空燃比近傍で出力特性が変化するO2センサを備えた船外機用内燃機関の空燃比を制御する空燃比制御方法であって、前記内燃機関の運転状態と学習値とに基づいて、空燃比を目標空燃比に制御するオープンループ制御ステップと、前記オープンループ制御ステップにより目標空燃比を所定の希薄側の空燃比に制御している状態から、目標空燃比を理論空燃比に移行させ、前記O2センサの出力に基づいて決定されるフィードバック補正係数を用いて空燃比を理論空燃比にフィードバック制御するフィードバック制御ステップと、前記フィードバック制御ステップにおいて、前記O2センサの出力がリーン側からリッチ側およびリッチ側からリーン側に反転するときのフィードバック補正係数の平均値を算出する平均値算出ステップと、前記平均値算出ステップにより算出された平均値が略一定になったときの平均値に基づいて学習値を算出する学習値算出ステップと、を有することを特徴とする船外機用内燃機関の空燃比制御方法。内燃機関の排気系に配置され理論空燃比近傍で出力特性が変化するO2センサを備えた船外機用内燃機関の空燃比を制御するためのプログラムであって、前記内燃機関の運転状態と学習値とに基づいて、空燃比を目標空燃比に制御するオープンループ制御ステップと、前記オープンループ制御ステップにより目標空燃比を所定の希薄側の空燃比に制御している状態から、目標空燃比を理論空燃比に移行させ、前記O2センサの出力に基づいて決定されるフィードバック補正係数を用いて空燃比を理論空燃比にフィードバック制御するフィードバック制御ステップと、前記フィードバック制御ステップにおいて、前記O2センサの出力がリーン側からリッチ側およびリッチ側からリーン側に反転するときのフィードバック補正係数の平均値を算出する平均値算出ステップと、前記平均値算出ステップにより算出された平均値が略一定になったときの平均値に基づいて学習値を算出する学習値算出ステップと、をコンピュータに実行させるためのプログラム。船外機は、自動二輪車や自動車等の車両と異なり、様々な種類の船体に搭載することが可能である。例えば高速船や重量船に取り付けたり、あるいは1つの船体に複数の船外機を取り付けたりする場合がある。このように使用環境が異なる場合、内燃機関では目標の空燃比に対する実際の空燃比のズレが生じてしまう。また、諸外国を中心に内燃機関の燃料としてアルコール混合ガソリンが使用されるようになっている。純正ガソリンとアルコール混合ガソリンとでは、理論空燃比が異なるので、内燃機関についての燃料噴射量等も異なる。したがって、純正ガソリンからアルコール混合ガソリンに燃料を変更したときにも、内燃機関では目標の空燃比に対する実際の空燃比のズレが生じてしまう。上述したような、実際の空燃比が目標の空燃比に対してズレたまま運転が継続されると、燃費の向上が図れなかったり、操船者の操作感に違和感を与えてしまったりしてしまう。したがって、早期に学習補正係数を算出して、算出した学習補正係数を適用させて、実際の空燃比を目標の空燃比に短時間で一致させることが望まれる。一方、早期に学習補正係数を算出することだけに重きが置かれ、正確ではない学習補正係数を適用したのでは、実際の空燃比を目標の空燃比に一致させるという本来の目的が損なわれてしまう。本発明は、上述したような問題点に鑑みてなされたものであり、目標の空燃比に対する実際の空燃比のズレを短時間、かつ正確に補正することを目的とする。本発明に係る船外機用内燃機関の空燃比制御装置は、内燃機関の排気系に配置され理論空燃比近傍で出力特性が変化するO2センサを備えた船外機用内燃機関の空燃比を制御する空燃比制御装置であって、前記内燃機関の運転状態と学習値とに基づいて、空燃比を目標空燃比に制御するオープンループ制御手段と、前記オープンループ制御手段により目標空燃比を所定の希薄側の空燃比に制御している状態から、目標空燃比を理論空燃比に移行させ、前記O2センサの出力に基づいて決定されるフィードバック補正係数を用いて空燃比を理論空燃比にフィードバック制御するフィードバック制御手段と、前記フィードバック制御手段によるフィードバック制御において、前記O2センサの出力がリーン側からリッチ側およびリッチ側からリーン側に反転するときのフィードバック補正係数の平均値を算出する平均値算出手段と、前記平均値算出手段により算出された平均値が略一定になったときの平均値に基づいて学習値を算出する学習値算出手段と、を有することを特徴とする。また、本発明に係る空燃比制御方法は、内燃機関の排気系に配置され理論空燃比近傍で出力特性が変化するO2センサを備えた船外機用内燃機関の空燃比を制御する空燃比制御方法であって、前記内燃機関の運転状態と学習値とに基づいて、空燃比を目標空燃比に制御するオープンループ制御ステップと、前記オープンループ制御ステップにより目標空燃比を所定の希薄側の空燃比に制御している状態から、目標空燃比を理論空燃比に移行させ、前記O2センサの出力に基づいて決定されるフィードバック補正係数を用いて空燃比を理論空燃比にフィードバック制御するフィードバック制御ステップと、前記フィードバック制御ステップにおいて、前記O2センサの出力がリーン側からリッチ側およびリッチ側からリーン側に反転するときのフィードバック補正係数の平均値を算出する平均値算出ステップと、前記平均値算出ステップにより算出された平均値が略一定になったときの平均値に基づいて学習値を算出する学習値算出ステップと、を有することを特徴とする。また、本発明に係るプログラムは、内燃機関の排気系に配置され理論空燃比近傍で出力特性が変化するO2センサを備えた船外機用内燃機関の空燃比を制御するためのプログラムであって、前記内燃機関の運転状態と学習値とに基づいて、空燃比を目標空燃比に制御するオープンループ制御ステップと、前記オープンループ制御ステップにより目標空燃比を所定の希薄側の空燃比に制御している状態から、目標空燃比を理論空燃比に移行させ、前記O2センサの出力に基づいて決定されるフィードバック補正係数を用いて空燃比を理論空燃比にフィードバック制御するフィードバック制御ステップと、前記フィードバック制御ステップにおいて、前記O2センサの出力がリーン側からリッチ側およびリッチ側からリーン側に反転するときのフィードバック補正係数の平均値を算出する平均値算出ステップと、前記平均値算出ステップにより算出された平均値が略一定になったときの平均値に基づいて学習値を算出する学習値算出ステップと、をコンピュータに実行させるためのプログラムである。本発明によれば、目標空燃比に対する実際の空燃比のズレを短時間、かつ正確に補正することができるので、希薄側の空燃比での運転の割合機会を増やし燃費向上をより図ることができる。以下、本発明に係る実施形態について図面を参照して説明する。図1は、船外機の外観図である。図1に示すように、船外機10は船体1のトランサムボード2に取り付けられる。船外機10は全体がカバー11によって覆われることで、形状が整えられて構成されている。このカバー11の内部には、船外機用内燃機関としてのエンジン12が収容されている。また、船外機10の下方には、エンジン12を動力とし船体1を推進させるためのスクリュー13が配設されている。なお、本実施形態に係るエンジン12は、水冷4サイクルV型6気筒が採用されている。図2は、船外機の内部構成を示すブロック図である。船外機10は、各種の構成機器を制御するコンピュータとしてのエンジンコントロールユニット20を有している。エンジンコントロールユニット20は、本実施形態に係る空燃比制御装置であって、CPU21、ROM22、RAM23、EEPROM24、入力インタフェース25、出力インタフェース26を含んで構成されている。CPU21は、ROM22に格納されたプログラムを実行して、各種センサ等から出力される信号に基づいて、インジェクタ30を介して空燃比を制御する。ROM22は、不揮発性メモリであって、CPU21が実行するプログラムやCPU21が各機器を制御するときの初期値や閾値等を格納している。RAM23は、揮発性メモリであって、CPU21が各機器を制御するときに算出した情報等を一時的に記憶している。EEPROM24は、書き換え可能な記憶部としての不揮発性メモリであって、CPU21が各機器を制御する場合の情報等、例えば空燃比を制御するための学習値を記憶している。入力インタフェース25は、図2に示すように、クランク角センサ41、スロットル開度センサ42、吸気管圧力センサ43、シリンダ壁温センサ44、冷却水温度センサ45、イグニッションスイッチ46、チルトトリム角センサ47、O2センサ48、姿勢計49等から出力される信号を受信する入力回路である。クランク角センサ41は、各気筒のクランクシャフト不図示に近接して配置され、所定のクランク角度で信号を出力する。なお、CPU21は、クランク角センサ41から出力された信号をカウントすることで、エンジン回転数を検出することができる。また、操船者によるスロットルレバーの操作に応じて、吸気管不図示に配置されたスロットバルブ不図示が閉閉し、エンジン12に供給される空気量が調整される。このとき、スロットル開度センサ42は、スロットバルブの開度に応じた信号を出力する。吸気管圧力センサ43は、吸気管に配置され、吸気管内圧力の信号を出力する。シリンダ壁温センサ44は、エンジン12のシリンダブロック不図示の温度の信号を出力する。冷却水温度センサ45は、冷却水の温度の信号を出力する。イグニッションスイッチ46は、操船者によりオンとオフとが選択できるように構成され、オンされることにより各機器に電力が供給され、オフされることにより各機器への電力が遮断される。チルトトリム角センサ47は、図1に示すように船体1に対する船外機10のトリム角βを検出し信号を出力する。O2センサ48は、エンジン12の排気系に配置され、理論空燃比近傍で特性が変化する出力を生じる。具体的には、O2センサ48は、エンジン12の実際の空燃比が理論空燃比に対してリーン側であるかリッチ側であるかを示す信号を出力する。図3は、O2センサ48が配置されている位置を示す船外機の模式図であり、船外機を後方から見た図である。本実施形態では上述したようにV型6気筒のエンジン12が用いられている。V型エンジンは、複数の気筒がシリンダ内であって、クランクシャフト不図示を中心に所定のバンク角でV字型に配置される。本実施形態のエンジン12では、6気筒のうち右側バンク14に3つの気筒♯1、♯3、♯5が配置され、左側バンク15に3つの気筒♯2、♯4、♯6が配置されている。右側の各気筒♯1、♯3、♯5には排気管16が接続され、左側の各気筒♯2、♯4、♯6には排気管17が接続されている。排気管16と排気管17とは、船外機10の下方に向かって延出され、船外機10の略中央で結合され、さらに下方に向かうように延設されている。各気筒から排気された排気ガスは、各排気管16、17を通って、水中に排気される。本実施形態に係るエンジン12では、O2センサ48は、排気管17であって気筒♯2に近接した位置に配設されている。したがって、O2センサ48は、主に気筒♯2によって排気された排気ガスの空燃比が理論空燃比に対してリーン側であるかリッチ側であるかを検出している。ただし、本実施形態では、左側バンク15の3つの気筒♯2、♯4、♯6の排気ガスは共通の排気管17によって排気される。したがって、O2センサ48は、気筒♯2よりも影響は少ないものの、気筒♯4、♯6の排気ガスを含んだ排気ガスの空燃比を検出している。このようにO2センサ48は、一方のバンクに配置されている気筒の排気系のみに設置されている。すなわち、O2センサ48は、エンジン12に配置された複数気筒のうち、一部の気筒の排気ガスの空燃比を検出できるように構成されている。姿勢計49は、例えばジャイロセンサであって、船外機10の姿勢を検出し信号を出力する。また、出力インタフェース26は、インジェクタ30やイグニッションコイル31を制御するための信号を送信する出力回路である。エンジンコントロールユニット20は、各種センサ等が出力する信号に基づいてインジェクタ30の燃料噴射量を制御し空燃比の制御を行う。特に、燃費を向上させるために、空燃比を理論空燃比よりも所定の希薄側の空燃比にして運転希薄燃焼運転させたい場合がある。しかし、例えばインジェクタ等の部品のばらつきにより、実際の空燃比が所定の希薄側の空燃比よりズレた空燃比になっている場合があり、この場合、O2センサ48は実際の空燃比が所定の希薄側の空燃比よりもどのくらいズレているかを検出することができない。したがって、例えば、実際の空燃比が所定の希薄側の空燃比よりもリッチ側にズレて運転されている場合、燃費を向上させることは困難である。したがって、本実施形態では、まず目標空燃比を理論空燃比にして、O2センサ48を用いてフィードバック制御を実行し、フィードバック補正係数を算出しながら、実際の空燃比を目標空燃比に補正するための後述する学習値を算出する。次に、算出した学習値を適用させてオープンループ制御することで、実際の空燃比を所定の希薄側の空燃比に精度よく制御することができ、燃費を向上させた運転を行うことができる。また、例えば学習値が算出された後に、船外機10が異なる船体に取り付けたり、純正ガソリンに代えてアルコール混合ガソリンが使用されたりする場合がある。この場合、前回学習した学習値で空燃比を制御しても、実際の空燃比は、所定の希薄側の空燃比よりズレた空燃比になってしまう。通常、船外機10の取り付けや燃料の給油はエンジン12を停止した状態で行うので、本実施形態では、エンジン始動後に初めて所定の条件を満たしたときに、再び学習値を算出し、算出した学習値を適用させてオープンループ制御することで、実際の空燃比を異なる使用環境や燃料に応じた所定の希薄側の空燃比に制御することができる。以下、上述した空燃比制御について具体的に説明する。まず、本実施形態では、空燃比制御をするときの燃料噴射量を、次式1によって算出する。燃料噴射量Ti=基本燃料噴射量TP×1フィードバック補正係数α学習値α ́各種補正係数Coef式1ここで、基本燃料噴射量TPは、吸気管圧力センサ43により検出された吸気管圧力に基づいて算出され、吸気温度や大気圧等により補正される値である。すなわち、現在の運転状態に応じた値が適用される。フィードバック補正係数αは、フィードバック制御時にO2センサ48の出力に基づいて算出される値であり、オープンループ制御時にはα=0になる。学習値α ́は、フィードバック制御時に算出されたフィードバック補正係数αの出力に基づいて算出される値であり、フィードバック制御時およびオープンループ制御時にそれぞれ代入される。各種補正係数Coefは、エンジン12の始動時、暖機時、加減速時等の条件で補正される係数である。以下、エンジンコントロールユニット20が行う処理について図4~図7を参照して説明する。図4は、空燃比制御の処理を示すメインフローチャートである。図5は、フィードバック制御の処理を示すフローチャートである。図6は、フィードバック制御において次の処理に進む条件を判定するためのフローチャートである。図7は、フィードバック制御の内容をグラフで示した図である。なお、図4~図6に示すフローチャートは、エンジンコントロールユニット20のCPU21がROM22に格納されたプログラムを実行することにより実現される。まず、ステップS10では、操船者によりイグニッションスイッチ46がオンされることで、CPU21は各機器に電力を供給するように制御し、エンジン12が始動される。CPU21は、ROM22に格納されたプログラムをRAM23に読み出し、プログラムに基づいて空燃比制御の処理を開始する。ステップS11において、エンジン始動後、初めて本処理を行うとき、CPU21は前回の運転でエンジン12をオフしたときにEEPROM24に記憶した学習値α ́を読み出し、RAM23に記憶する。CPU21は、RAM23に記憶した学習値α ́を上述した式1に代入すると共に、フィードバック補正係数α=0を式1に代入して燃料噴射量を算出し、オープンループ制御にて空燃比を制御する。このとき、基本噴射量TPは、上述したように吸気管圧力センサ43により検出された吸気管圧力やエンジン回転数等に基づいて算出される。吸気管圧力は運転状態に応じて変動するので、CPU21は、運転状態とRAM23に記憶された学習値α ́とに応じて燃料噴射量Tiが算出され、オープンループ制御にて空燃比を制御することとなる。なお、エンジン12を購入して初めて運転する場合、EEPROM24に記憶された初期値の学習値α ́を適用することができる。ステップS12では、CPU21は、今回エンジン12を始動してから学習値α ́を前回の学習値から書き換えたか否か、すなわち再び学習値を学習したか否かを判定する。具体的には、CPU21は、RAM23に記憶されている学習完了フラグFfを読み出して判定する。学習が既に完了し学習完了フラグFfが1の場合、ステップS14に処理を進め、学習が完了しておらず学習完了フラグFfが0の場合、ステップS13に処理を進める。ステップS13では、CPU21は、後述するフィードバック制御を行い、RAM23から読み出した学習値α ́を今回学習した学習値に書き換えて更新する。すなわち、CPU21は、現時点におけるエンジン12の使用環境や燃料に応じた学習値α ́を再学習する。このように、学習値α ́を再学習するのは、イグニッションスイッチ46がオンされる前に、船外機10が前回とは異なる船体1に取り付けられたり、燃料にアルコール混合ガソリンが給油されたりするためである。ステップS13の処理については、図5のフローチャートを参照して後述する。ステップS14では、CPU21は、操船者によりイグニッションスイッチ46がオフされたか否かを判定する。オフされた場合、CPU21は、RAM23に記憶されている学習値α ́をEEPROM24に記憶して、各機器に電力の供給を停止すると共に、エンジン12を停止する。ここで、学習値α ́をEEPROM24に記憶することで、CPU21は、電力の供給が停止されても次回のエンジン12の始動時にステップS11においてEEPROM24から学習値α ́を読み出すことができる。イグニッションスイッチ46がオフされない場合、CPU21は、ステップS11に処理を戻し、RAM23に記憶されている学習値α ́を用いて、オープンループ制御を行うことで、空燃比を目標空燃比に制御することができる。次に、上述したステップS13におけるフィードバック制御について、図5に示すフローチャートおよび図7に示す空燃比の制御方法を示すグラフを参照して説明する。まず、ステップS20では、CPU21は、全ての気筒♯1~♯6について、目標空燃比を所定の希薄側の空燃比にして運転希薄燃焼運転する。なお、本実施形態では、所定の希薄側の空燃比として18を適用するものとする。具体的に、ステップS20では、CPU21は、RAM23に記憶された学習値α ́を上述した式1に代入すると共に、フィードバック補正係数α=0を式1に代入して燃料噴射量を算出し、オープンループ制御にて目標空燃比が18になるように制御する。ここで、RAM23に記憶されている学習値α ́は、前回のエンジン始動時において記憶した学習値であるため、今回、異なる船体に取り付けられていたり、アルコール混合ガソリンが給油されたりして、使用環境や燃料が異なっている場合には、目標空燃比に対して実際の空燃比がズレてしまう。図7aは目標空燃比に対して実際の空燃比の変動を示すグラフであり、図7bはフィードバック補正係数の変位を示すグラフである。ここでは、図7aに示すように、目標空燃比に対して実際の空燃比がSだけズレているものとする。上述したようにO2センサ48は、実際の空燃比が理論空燃比のリーン側かリッチ側かしか検出することしかできず、所定の希薄側の空燃比に対してどのくらいズレているか、すなわち図7aに示すSの値を検出することができない。そこで、CPU21は、目標空燃比を理論空燃比にして、実際の空燃比をO2センサ48で検出して、目標空燃比に対する実際の空燃比のズレを補正するフィードバック制御を実行する。ステップS21では、CPU21は、目標空燃比を理論空燃比に移行させる前に、以下で説明する所定の条件が成立しているか否かを判定する。具体的には、CPU21は、RAM23に記憶されている移行条件成立フラグFaを読み出して判定する。移行条件が成立し移行条件成立フラグFaが1の場合、ステップS22に処理を進め、移行条件が成立せず移行条件成立フラグFaが0の場合、移行条件が成立するのを待機する。次に、上述したステップS21における条件成立の判定方法について、図6に示すフローチャートを参照して説明する。まず、ステップS41では、CPU21は、現在のエンジン回転数が、空燃比が安定するエンジン回転数であるか否かを判定する。空燃比が安定するエンジン回転数の場合ステップS42に処理を進め、条件を満たさない場合ステップS48に処理を進める。ステップS48では、移行条件成立フラグFaを0にしてRAM23に記憶し、目標空燃比を理論空燃比に移行させないようにする。ステップS41のような判定を行うのは、エンジン回転数が高回転である場合、あるいは低回転である場合、空燃比が安定せず正確なフィードバック制御を行うことができないためである。ステップS41では、エンジン回転数が、例えば2000rpm以上4000rpm以下であるか否か等、ROM22に記憶された閾値に基づいて判定される。ステップS42では、CPU21は、船外機10が安定した姿勢で所定時間が経過しているか否かを判定する。具体的には、CPU21は、姿勢計49が出力する信号に基づいて船外機10が安定した姿勢で所定時間が経過しているか否かを判定する。船外機10が安定した姿勢で所定時間が経過している場合ステップS43に処理を進め、条件を満たさない場合ステップS48に処理を進め移行条件成立フラグFaを0にしてRAM23に記憶する。ステップS42のような判定を行うのは、例えば滑走状態になる前のように船体1がプレーニングしていて、船体1の姿勢が変化している場合、エンジン回転数および空燃比が変化してしまい、正確なフィードバック制御を行うことができないためである。なお、船体1の姿勢は姿勢計で検出する場合に限られず、スロットル開度およびエンジン回転数が一定で所定時間が経過しているか否かを判定してもよい。ステップS43では、CPU21は、操船者により船外機10のトリム角βを変更する操作がされた後、所定時間が経過しているか否かを判定する。具体的には、CPU21は、チルトトリム角センサ47が出力する信号に基づいて船外機10のトリム角βが変更されたかを判定する。船外機10のトリム角βを変更する操作がされた後、所定時間が経過している場合ステップS44に処理を進め、条件を満たさない場合ステップS48に処理を進め移行条件成立フラグFaを0にしてRAM23に記憶する。ステップS43のような判定を行うのは、トリム角βを変更する操作をしている場合船外機10の姿勢が変化し、エンジン回転数および空燃比が変化してしまい、正確なフィードバック制御を行うことができないためである。ステップS44では、CPU21は、エンジン12が暖機運転中ではないか否かを判定する。具体的には、CPU21は、シリンダ壁温センサ44が出力する信号に基づいて例えばROM22に記憶されている閾値以上の温度であるか否かを判定する。暖機運転中でない場合ステップS45に処理を進め、暖機運転中である場合ステップS48に処理を進め移行条件成立フラグFaを0にしてRAM23に記憶する。ステップS44のような判定を行うのは、暖機運転中の場合冷機状態における運転の安定性を優先して理論空燃比よりも濃い空燃比で運転しており、O2センサ48の検出によるフィードバック制御を停止しているためである。なお、本実施形態のように、水冷エンジンの場合、上述した閾値の温度をサーモスタット不図示の開温度に応じた値に設定することができる。したがって、寒冷地仕様のエンジン12では開温度が高いサーモスタットが用いられることがあるため、この場合、閾値の温度をサーモスタットの開温度に応じて高く設定する。このように、閾値の温度を設定することで、より安定した空燃比でのフィードバック制御ができる。ステップS45では、CPU21は、エンジン回転数の変化が少ない状態で、所定時間が経過したか否かを判定する。具体的には、CPU21は、クランク角センサ41が出力する信号をカウントすることでエンジン回転数を検出し、エンジン回転数の変化が少ないか否かを判定する。エンジン回転数の変化が少ない状態で、所定時間が経過した場合ステップS46に処理を進め、条件を満たさない場合ステップS48に処理を進め移行条件成立フラグFaを0にしてRAM23に記憶する。ステップS45のような判定を行うのは、加速時や減速時のようなエンジン回転数の変化が大きい間は、空燃比が変化してしまい、正確なフィードバック制御を行うことができないためである。ステップS46では、CPU21は、スロットル開度の変化が少ない状態で、所定時間が経過したか否かを判定する。具体的には、CPU21は、スロットル開度センサ42が出力する信号に基づいて単位時間当たりのスロットル開度の変化が少ないか否かを判定する。スロットル開度の変化が少ない状態で、所定時間が経過している場合ステップS47に処理を進め、条件を満たさない場合ステップS48に処理を進め移行条件成立フラグFaを0にしてRAM23に記憶する。ステップS46のような判定を行うのは、スロットル開度の変化が大きい場合、空燃比が変化してしまい、正確なフィードバック制御を行うことができないためである。ステップS47では、上述した各ステップの所定の条件を満たしエンジン12が正確なフィードバック制御を行うことができる状態であるため、CPU21は、移行条件成立フラグFaを1にしてRAM23に記憶し、図5に示すステップS21の処理に戻る。上述したように、ステップS21では、CPU21は、移行条件成立フラグFaが1の場合、ステップS22に処理を進める。ステップS22では、CPU21は、目標空燃比を所定の希薄側の空燃比18近傍にして運転している状態から、目標空燃比を理論空燃比14.7に移行させる。本実施形態では、CPU21は、6つの気筒♯1~♯6のうち一部の気筒であって、O2センサ48が配置された左側バンク15の気筒♯2、♯4、♯6についてのみ理論空燃比に移行させる。このとき、CPU21は、フィードバック補正係数α=0にしたまま、基本噴射量TPを増加させることで、燃料噴射量Tiを増加させ、目標空燃比が理論空燃比14.7になるように運転する。なお、このとき、CPU21は式1の学習値α ́には、前回の学習値を代入したまま、基本噴射量TPを変動させる。ステップS23では、CPU21は、そのまま目標空燃比を理論空燃比にした状態で運転を継続させる。なお、図7aに示すように、目標空燃比を理論空燃比にしたとしても、学習値α ́の値が前回のエンジン12の始動時において記憶した学習値で運転しているため、実際の空燃比は理論空燃比に対してズレてしまっている。ステップS24では、CPU21は、目標空燃比を理論空燃比に移行してから、所定時間が経過したか否かを判定する。所定時間が経過した場合ステップS25に処理を進め、所定時間が経過していない場合ステップS23に処理を戻し、所定時間が経過するのを待機する。ステップS24のような処理を行うのは、図7aに示すように、移行条件が成立した後、目標空燃比を理論空燃比にしてから実際の空燃比が一定の空燃比になるまでにタイムラグがあるためである。なお、ここでの所定時間は、現在のエンジン回転数に応じた時間が適用される。ステップS25では、CPU21は、フィードバック制御に移行する前に、所定の条件が成立しているか否かを判定する。具体的には、CPU21は、RAM23に記憶されている実行条件成立フラグFbを読み出して判定する。実行条件が成立し実行条件成立フラグFbが1の場合ステップS26に処理を進め、実行条件が成立せず実行条件成立フラグFbが0の場合実行条件が成立するのを待機する。ステップS25における条件成立の判定方法は、上述した図6に示すフローチャートと同様であり、詳細な説明は省略する。ここでは、上述したステップS41からステップS46までの処理で説明したように、所定の条件を満たし、現在のエンジン12の運転状態が正確なフィードバック制御を行うことができる場合、ステップS47に処理を進め、CPU21は、実行条件成立フラグFbに1を代入し、RAM23に記憶する。一方、正確なフィードバック制御を行うことができない場合、ステップS48に処理を進め、CPU21は、実行条件成立フラグFbに0を代入し、RAM23に記憶する。その後、ステップS25に処理を戻す。このように、実行条件が成立する場合にのみフィードバック制御を実行することにより、正確なフィードバック制御を行うことができる。上述したように、ステップS25では、CPU21は、実行条件が成立し実行条件成立フラグFbが1の場合、ステップS26に処理を進める。ステップS26では、CPU21は、フィードバック制御を実行する。本実施形態では、CPU21は、6つの気筒♯1~♯6のうち一部の気筒であって、O2センサ48が配置された左側バンク15の気筒♯2、♯4、♯6についてのみフィードバック制御を行う。具体的には、図7aおよびbに示すように、現在の空燃比を検出しているO2センサ48が理論空燃比よりもリッチ側の信号を出力している場合、CPU21はフィードバック補正係数αを減少させて、空燃比をリーン側に制御する。逆に、O2センサ48が理論空燃比よりもリーン側の信号を出力している場合、CPU21はフィードバック補正係数αを増加させて、空燃比をリッチ側に制御する。このような処理を繰り返すことで、図7bに示すように、フィードバック補正係数αの値が減少と増加とが交互に繰り返される。また、図7aに示すように、実際の空燃比が理論空燃比を中心としてリッチ側とリーン側とを交互に反転が繰り返され、フィードバック制御が行われる。なお、このとき、CPU21は式1の学習値α ́には、前回の学習値を代入したまま、フィードバック補正係数αを変動させる。このように、前回の学習値を適用させた状態でフィードバック補正係数αを変動させることで、前回の学習を利用することができるので、フィードバック補正係数αの変動を少なくすることができる。すなわち、フィードバック補正係数αの変動を少なくすることは、燃料噴射量Tiの変動も少なくなることであり、結果としてエンジン12の挙動の変動を少なくすることができる。なお、燃料にアルコール混合ガソリンが給油された場合、アルコールの濃度が濃くなるにしたがって、理論空燃比は14.7から小さい値になってしまう。しかしながら、O2センサ48は、アルコールの濃度に応じた理論空燃比に対して、実際の空燃比がリッチ側であるかリーン側であるかを出力することができるために、図7aに示すグラフと同じように、実際の空燃比がアルコールの濃度に応じた理論空燃比を中心としてリッチ側とリーン側とを交互に反転が繰り返され、フィードバック制御が行われる。すなわち、燃料にアルコール混合ガソリンが給油された場合、異なる使用環境と燃料との両方による実際の空燃比と目標理論空燃とのズレを補正するようにフィードバック制御が行われる。次に、ステップS27では、CPU21は、実際の空燃比がリッチ側からリーン側に反転するときのフィードバック補正係数およびリーン側からリッチ側に反転するときのフィードバック補正係数をサンプリングし、RAM23に記憶する。具体的には、図7bに示すように、例えば、リッチ側の反転時のフィードバック係数をそれぞれR1、R2Rnとし、リーン側の反転時のフィードバック係数をそれぞれL1、L2Lnとする。この場合、CPU21は、各フィードバック補正係数R1、R2RnおよびL1、L2LnをRAM23に記憶する。CPU21は、RAM23に記憶された過去の所定回数分のフィードバック補正係数からフィードバック係数の平均値を算出し、算出した平均値をRAM23に記憶する。具体的に最初にステップS27で算出される平均値は、次式2を用いて算出される。平均値A=R1R2RnL1L2Ln/2×n式2CPU21は、空燃比が反転したときのフィードバック補正係数をサンプリングする毎、過去の所定回数分のフィードバック補正係数から平均値を新たに算出し、算出した平均値をRAM23に記憶する。例えば所定回数分を10とし、最初にステップS27に進んだ場合、CPU21は、R1~R5、L1~L5の合計10のフィードバック補正係数から平均値A1を算出する。次に、後述するステップS28をNOに分岐した後、2回目にステップS27に進んだ場合、CPU21はL6のフィードバック補正係数をサンプリングして、R1~R5、L2~L6の合計10のフィードバック補正係数から平均値A2を算出する。以降も同様に、3回目にステップS27に進んだ場合、CPU21は、R6のフィードバック補正係数をサンプリングして、R2~R6、L2~L6の合計10のフィードバック補正係数から平均値A3を算出する。このように、ステップS27では、CPU21は、最新のフィードバック補正係数からカウントして過去の所定回数分のフィードバック補正係数までを用いて平均値Aを算出する。次に、ステップS28では、CPU21は、ステップS27で算出した平均値Aが略一定になったか否かを判定する。具体的には、CPU21は、今回よりも一つ前前回にステップS27で算出した平均値と比較することで、平均値が略一定になったか否かを判定する。例えば、ステップS27において、上述した平均値A2を算出した場合、その一つ前に算出した平均値A1と比較し、平均値A2と平均値A1とが略同一である場合、CPU21は、平均値Aが略一定になったと判定する。なお、具体的に平均値が略一定であるか否かの判断は、今回算出された平均値から前回算出された平均値を減算し、その値が所定の値よりも小さい場合には略一定であると判定してもよく、前回算出された平均値から今回算出された平均値の変化率を算出し、この変化率が所定の変化率よりも低い場合に略一定であると判定してもよい。このように平均値Aが略一定になったか否かを判定するのは、図7bの一点鎖線で示すように、反転時のフィードバック補正係数の平均値はフィードバック制御を実行してから徐々に一定になるためである。平均値Aが略一定になった場合ステップS29に処理を進める。一方、平均値Aが略一定ではない場合、CPU21は、平均値が略一定になるまで、ステップS26によるフィードバック制御とステップS27によるフィードバック補正係数の平均値の算出とを繰り返す。なお、フィードバック補正係数の平均値を算出するときに、上述した図6に示すような条件が成立しているか否かを判定する処理を追加し、その条件が成立した後、フィードバック補正係数をサンプリングしてフィードバック補正係数の平均値を算出することも考えられる。しかし、フィードバック補正係数の平均値Aが略一定になる時間は、エンジン回転数などによっても異なる。したがって、正確なフィードバック補正係数の平均値を算出するには、全てのエンジン回転数で平均値が略平均となる時間を設定しなければならない。すなわち、平均値Aが略一定になっているのにも関わらず、その条件が成立するまで待機しなければならないことから、平均値Aが算出されるまでに時間をかかってしまう。一方、実施形態のように、平均値Aが略一定になったか否かを判定し、略一定になったときの平均値Aを次の処理に用いることで、短時間でかつ正確に学習値を算出することができる。次に、ステップS29では、CPU21は式3のように、前回の学習値α ́に略一定になった平均値Aを加算して、新たな学習値α ́を算出する。新たな学習値α ́=前回の学習値α ́平均値A式3この時点で、学習値が再学習され、前回の学習値α ́が今回、式3で算出された新たな学習値α ́に書き換えられ更新される。すなわち、CPU21は、RAM23に新たな学習値α ́を記憶する。また、CPU21は、学習完了フラグFfに1を代入し、RAM23に記憶する。RAM23に記憶された新たな学習値α ́を用いて、燃料噴射量Tiを算出することで、現在の使用環境および燃料に応じた目標空燃比と実際の空燃比とのズレを補正することができる。ステップS30では、CPU21は、更新された新たな学習値α ́を全気筒、すなわち6つの気筒♯1~♯6に適用して、目標空燃比を所定の希薄側の空燃比にしてオープンループ制御に移行する。具体的には、CPU21は、上述した式1に、フィードバック補正係数α=0を代入すると共に、式1に再学習した学習値α ́を代入し、目標空燃比が所定の希薄側の空燃比になるように、燃料噴射量Tiを算出して運転する。図7aに示すように、再学習した学習値α ́を適用することで、実際の空燃比を目標とする所定の希薄側の空燃比に一致させることができる。したがって、部品のばらつきに限られず、異なる使用環境や燃料による実際の空燃比と目標理論空燃とのズレを補正でき、短時間でかつ正確に実際の空燃比を目標とする所定の希薄側の空燃比に一致させることができる。ステップS31では、CPU21は以降、ステップS30で説明した学習値α ́を適用し、所定の希薄側の空燃比での運転を継続して行う。その後、上述した図4に示すメインフローチャートに戻り、ステップS14において、CPU21は、イグニッションスイッチ46がオフされた場合、CPU21は、ステップS29にてRAM23に記憶されている再学習された学習値α ́を次回のエンジン12の始動時に適用できるようにEEPROM24に記憶する。なお、上述した説明では、図7のフィードバック制御の内容を示すグラフのように、実際の空燃比が目標空燃比に対してリッチ側にズレている場合を例にして説明した。しかし、この場合に限られず、図8のフィードバック制御の内容を示すグラフのように、実際の空燃比が目標空燃比に対してリーン側にズレている場合例えば純正ガソリンからアルコール混合ガソリンに燃料が変更されたとき等がある。図8aは目標空燃比に対して実際の空燃比の変動を示すグラフであり、図8bはフィードバック補正係数の変位を示すグラフである。この場合であっても、同様に異なる使用環境や燃料による実際の空燃比と目標理論空燃とのズレを補正でき、短時間でかつ正確に実際の空燃比を目標とする所定の希薄側の空燃比に一致させることができる。なお、目標空燃比に対する実際の空燃比のズレは、エンジン運転領域に応じて発生する場合がある。そこで、CPU21は、オープンループ制御を行うエンジン運転領域ここでは、エンジン回転数域を用いるを複数のゾーンに分けて、ゾーン毎に学習値α ́を学習するようにしてもよい。すなわち、図9に示すように、所定のエンジン回転数域B1~B2にあるときにオープンループ制御による希薄燃焼運転を実行する。ここでは、エンジン回転数域B1~B2を例えばゾーン1低回転数域、ゾーン2中回転数域、ゾーン3高回転数域に分けて、各ゾーンで学習値α ́を設定する。CPU21は、ゾーン毎に図5に示すステップS20~ステップS31の処理を行い、ゾーン毎に応じた学習値α ́を算出し、算出した学習値α ́をゾーン毎に適用してオープンループ制御することで、エンジン回転数域に応じて発生する空燃比のズレを高精度に補正することができる。なお、CPU21は、ゾーン1よりも更に低いエンジン回転数域図9に示すCではゾーン1で算出した学習値α ́を適用してオープンループ制御を行う。これは、ゾーン1よりも更に低いエンジン回転数域ではエンジン回転数のばらつきを大きく、正確な学習値α ́を算出することが困難なためである。また、CPU21は、ゾーン3よりも更に高いエンジン回転数域ではゾーン3で算出した学習値α ́を適用してオープンループ制御を行う。これは、ゾーン3よりも更に高いエンジン回転数域図9に示すDでは空燃比を理論空燃比にすることが困難であり、フィードバック制御をすることができないためである。したがって、ゾーン1は安定するエンジン回転数から設定するのが好ましく、ゾーン3は空燃比を理論空燃比にすることができるエンジン回転数までを設定することが好ましい。また、各ゾーン分けは、各ゾーンでの負荷変動の差が一定の範囲内に収まるように設定する。なお、ゾーン数は限定されるものではなく、例えばゾーンを細かく分けて学習値を設定すれば、それだけエンジン回転数に応じて発生する空燃比のズレを高精度に補正することができる。上述したように、本実施形態では、フィードバック制御において空燃比の反転時におけるフィードバック補正係数の平均値が略一定になったかを判定し、略一定になったときの平均値を用いて学習値を算出する。このような処理により、早期に正確なフィードバック補正係数の平均値を算出することができるので、それだけ短時間に誤差なく実際の空燃比を目標の空燃比に一致させることができる。したがって、希薄側の空燃比での運転の割合機会を増やし燃費向上を図ることができる。また、フィードバック補正係数の平均値を算出するときに所定回数分のフィードバック補正係数を用いることで、より正確にフィードバック補正係数の平均値が略一定になったか否かを判定することができる。また、本実施形態によれば、目標空燃比を理論空燃比にしてO2センサを用いてフィードバック制御し、目標空燃比に対する実際の空燃比のズレを学習することで、機器のコストを削減させることができる。また、エンジン始動後に初めて所定の条件を満たしたときに、目標空燃比に対する実際の空燃比のズレを学習することで、部品のばらつきに限られず使用環境や燃料に応じた学習値を算出でき、結果として、実際の空燃比を目標とする所定の希薄側の空燃比に一致させることができる。また、本実施形態では、V型エンジンにおける一方のバンクである一部の気筒にて学習値を算出した後、その学習値を全気筒に反映するので、CPU21は、学習値を算出するときの処理を削減することができ、迅速に学習値を算出することができる。以上、本発明を種々の実施形態と共に説明したが、本発明はこれらの実施形態にのみ限定されるものではなく、本発明の範囲内で変更等が可能である。例えば、上述した実施形態では、V型6気筒のエンジンを適用する場合について説明したが、この場合に限られず、直列型気筒のエンジンであってもよく、6気筒以外の複数気筒のエンジンであってもよい。また、上述した実施形態では、O2センサ48が配置されている排気管に対応する3つの気筒をフィードバック制御する場合について説明したが、この場合に限られない。例えば、O2センサ48に最も近接した気筒♯2のみをフィードバック制御し、フィードバック制御した結果を全気筒に反映させてもよい。このように、1つの気筒のみをフィードバック制御することで、CPU21は、迅速に学習値を算出することができる。